Shell

在與模式匹配的目錄中查找副檔名為 .csv 的文件

  • May 26, 2015

我有一個文件夾,其中有許多子文件夾。

根文件夾名稱為 allCSV,子文件夾名稱如下a_date(s), b_date(s), c_date(s) ...

我想要一個位於 a_date(s) 中並以.csv.

我試過:

find ../ -name '[a_]*' -a -name '*[.csv]'

但它顯示了所有以.csv

該模式匹配以字元或[a_]*開頭的名稱。該模式匹配以字元、或之一結尾的名稱。要匹配以 開頭的名稱,請使用. 要匹配以 結尾的名稱,請使用.a``_``*[.csv]``.``c``s``v``a_``-name 'a_*'``.csv``-name '*.csv'

find ../ -name 'a_*' -a -name '*.csv'或等效地find ../ -name 'a_*.csv'匹配名稱以 . 開頭a_和結尾的文件.csv。這不會過濾遍歷以到達文件的目錄。

如果文件位於父目錄的子目錄中(例如../a_foo/wibble.csv),則不需要find: 該find命令僅對遞歸搜尋目錄樹有用。您可以使用echols

ls ../a_*/*.csv

如果文件可以位於目錄下的子目錄中a_*(例如../a_foo/wibble.csvor ../a_foo/bar/wibble.csvbut not ../qux/a_foo/wibble.csv),則呼叫find並告訴它搜尋a_*目錄。

find ../a_* -name '*.csv'

或者,find您可以使用**萬用字元以遞歸方式搜尋子目錄,而不是使用 。在 ksh93 中,您需要先啟用此模式set -o globstar。在 bash 中,您需要先啟用此模式shopt -s globstar。在 zsh 中,預設情況下啟用此模式。其他shell(例如plain sh)沒有**.

ls ../a_*/**/*.csv

如果a_*目錄本身可以位於父目錄下方的任何深度,則可以使用find -path**

find .. -path '*/a_*/*.csv'
ls ../**/a_*/**/*.csv

引用自:https://unix.stackexchange.com/questions/205450