簡體   English   中英

如何在具有特定編號的目錄中查找具有特定模式的文件? 的Linux

[英]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'

擴展為三種模式:

  • 夾? (匹配0-9)
  • 文件夾[1-4]? (匹配10-49)
  • 資料夾50

問號是一個單字符通配符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM