1 つのグロブで複数のワイルドカードを使用する

1 つのグロブで複数のワイルドカードを使用する

私のディレクトリには、次のようなさまざまな拡張子を持つファイルのリストがあります。

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 で終わるファイルのみをリストしたい場合は、どうすればよいですか。2 つのパターン マッチング検索とを使用してls、またはを実行したいと思います。 一度にどちらか一方を検索する方法しか知らないのですが、両方の条件でファイル名を検索するにはどうすればよいでしょうか。find*abc**out

答え1

これにより、必要なものが得られます。

$ find . -name '*abc*' -o -name '*out'

答え2

質問で使用されている「and」を厳密な「論理積」、つまり「名前が一致するファイルを検索する」と解釈しています。両方 *abc*そして*out"。

1 つのファイル名グロブ パターンで複数のワイルドカードを使用できます。

$ ls *abc*out

または

$ find . -type f -name "*abc*out"

例えば。

パターンは、文字列を含み、 で終わる*abc*out任意の名前に一致します。abcout

パターンに一致するファイルがない場合、パターンは展開されません。その場合、 は有効なファイル名ではなく、lsパターンを*abc*out引数として取得し、 についてエラーを出力しますls: cannot access *abc*out: No such file or directory

bash展開されていないパターンを に渡すのではなく、ファイル グロブ パターンを展開できないというエラーを表示するにはlsfailglobシェル オプションを設定します。

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"

関連情報