在我的目錄中,我有一個具有不同擴展名的檔案列表,例如
file-abc-12.out
file-abc-12.csv
file-abc-12.txt
file-xyz-12.out
file-xyz-12.csv
file-xyz-12.txt
file-abc-04.out
file-abc-04.csv
file-abc-04.txt
file-xyz-04.out
file-xyz-04.csv
file-xyz-04.txt
如果我只想列出包含 abc 並以 .out 結尾的文件,我該怎麼做。我想使用兩個模式匹配搜尋和 來執行 als
或 a 。我只知道如何一次搜尋其中一個,我如何讓它搜尋具有這兩種條件的檔案名稱?find
*abc*
*out
答案1
這會給你你想要的:
$ find . -name '*abc*' -o -name '*out'
答案2
我將問題中使用的“和”解釋為嚴格的“邏輯與”,即“查找名稱匹配的文件”兩個都 *abc*
和*out
」。
您可以在一個檔案名稱通配模式中使用多個通配符:
$ ls *abc*out
或者
$ find . -type f -name "*abc*out"
例如。
該模式將匹配包含該字串並以 結尾的*abc*out
任何名稱。abc
out
如果沒有文件與該模式匹配,則該模式將保持未展開狀態。如果發生這種情況,ls
將獲取模式*abc*out
作為參數而不是有效的文件名,並會抱怨ls: cannot access *abc*out: No such file or directory
.
若要bash
顯示有關無法擴充檔案通配模式的錯誤,而不是將未擴充的模式傳遞給ls
,請設定failglob
shell 選項:
bash-4.4$ ls *abc*out
ls: *abc*out: No such file or directory
bash-4.4$ shopt -s failglob
bash-4.4$ ls *abc*out
bash: no match: *abc*out
答案3
我發現對我有用的解決方案涉及使用 grep。它跟隨:
$ ls *out | grep "abc"