Shell
在與模式匹配的目錄中查找副檔名為 .csv 的文件
我有一個文件夾,其中有許多子文件夾。
根文件夾名稱為 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
命令僅對遞歸搜尋目錄樹有用。您可以使用echo
或ls
:ls ../a_*/*.csv
如果文件可以位於目錄下的子目錄中
a_*
(例如../a_foo/wibble.csv
or../a_foo/bar/wibble.csv
but 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