ls で複数のパターンをマッチングする

ls で複数のパターンをマッチングする

外部スクリプトで使用するために、現在のディレクトリにある失敗ログのリストを取得したいのですが、ログはファイル名のパターン FAIL で判別されるため、スクリプト ファイルをフィードして開いて処理するために FAIL* を使用しています。ただし、各 FAIL ファイルには、圧縮ファイルと非圧縮ファイルの 2 つのタイプがあります。非圧縮ファイルを開きたいだけです。

*.gz/bz2/その他が存在する場合は、FAIL* を連鎖して検出できないでしょうか?

答え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しかし、出力は解析しやすいように構造化されていないため、通常は解析しないことをお勧めします。

関連情報