[英]How to find files with specific pattern in directory with specific number? Linux
我有一個名為folder1的文件夾,一直到folder150甚至可能更遠..但我只想在某些文件夾中找到文本文件的完整路徑(例如,從folder1到folder50)。
我認為以下命令可能有效,但這是不正確的。
find '/path/to/directory/folder{1..50}' -name '*.txt'
只要解決方案正確,它就不必使用find。
find /path/to/directory/folder{1..50} -name '*.txt' 2>/dev/null
或僅基名
find /path/to/directory/folder{1..50} -name '*.txt' -exec basename {} \; 2>/dev/null
或沒有.txt的基本名稱
find /path/to/directory/folder{1..50} -name '*.txt' -exec basename {} .txt \; 2>/dev/null
V. Michel的答案直接解決了您的問題; 補充說明 :
Bash的大括號擴展名僅適用於未加引號的字符串。 您的解決方案嘗試使用單引號字符串,其內容根據定義被解釋為文字 。
對比以下兩個語句:
# WRONG:
# {...} inside a single-quoted (or double-quoted) string: interpreted as *literal*.
echo 'folder{1..3}' # -> 'folder{1..3}'
# OK:
# Unquoted use of {...} -> *brace expansion* is applied.
echo 'folder'{1..3} # -> 'folder1 folder2 folder 3'
請注意,在上面的第二個示例中,僅大括號表達式不加引號,這表明您可以在Bash中有選擇地混合帶引號和未引號的子字符串。
值得注意的是,它是-並且只能是-在這里執行括號擴展的Bash ,並且find
僅看到生成的文字路徑。 [1]
find
僅接受文字路徑作為文件名操作數。
(某些find
的原語(測試),例如-name
和-path
,確實支持glob (如問題所示),但不支持大括號擴展;以確保此類glob完整地傳遞給find
,而不會過早擴展由Bash加上引號 ;例如-name '*.txt'
)
[1]擊執行括號擴展, 通配 (路徑擴展)后可能發生, 此外 ,如在證實ehaymore的回答 ; folder(?,[1-4]?,50)
大括號擴展到令牌folder?
, folder[1-4]?
和folder50
,由於其中包含模式元字符( ?
, [...]
),因此其中的前兩個會受到folder50
。 無論是否涉及遍歷,目標程序最終只會看到生成的文字路徑。
您可以為find命令提供多個目錄,每個目錄都與您要查找的模式匹配。 例如,
find /path/to/directory/folder{?,[1-4]?,50} -name '*.txt'
擴展為三種模式:
問號是一個單字符通配符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.