使用 ls 匹配多個模式

使用 ls 匹配多個模式

我想取得當前目錄中的失敗日誌列表,以便在外部腳本中使用,這些日誌是透過檔案名稱中的模式 FAIL 確定的,因此我一直在使用 FAIL* 來提供要開啟的腳本檔案和流程。但是,每個 FAIL 檔案都有兩種類型:壓縮檔案和未壓縮檔案。我只想打開未壓縮的檔案。

是否可以連結 find FAIL* 但如果 *.gz/bz2/whatever 存在則不能連結?

答案1

您可以測試這些擴充功能是否存在正規表示式:

for file in *FAIL*; do [[ ! $file =~ .(bz2|gz) ]] && printf "%s\n" "$file"; done

插入強制性警告不解析ls

答案2

如果您使用該find命令,您可以省略以擴展名結尾的文件,.gz如下所示:

$ ls -l
total 0
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL.gz

$ find . -name "*FAIL*" ! -name "*.gz"
./FAIL

您也可以ls像這樣過濾輸出:

$ ls *FAIL* | grep -v '.gz'
FAIL

但通常建議不要解析ls輸出,因為它的結構不利於解析輸出。

相關內容