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

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

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

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つのパターン一致検索を使用してaまたはaを実行したいと思いますls。一度に1つだけ検索する方法だけを知っています。両方の条件を使用してファイル名を取得するにはどうすればよいですか?find*abc**out

答え1

これにより、必要なものを得ることができます。

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

答え2

私は質問に使用された「and」を厳密に「論理的AND」、つまり「名前が一致するファイルを見つける」を意味すると解釈します。両方 *abc*そして*out」。

ファイル名ワイルドカードパターンに複数のワイルドカード文字を使用できます。

$ ls *abc*out

または

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

例えば。

パターンはその文字列を含み、.で終わる*abc*outすべての名前と一致します。abcout

パターンに一致するファイルが存在しない場合、パターンは拡張されていません。これが発生すると、パターンは有効なファイル名の代わりに引数としてls取得されます。*abc*outls: cannot access *abc*out: No such file or directory

拡張できないファイルグロービングパターンに関するエラーを表示するには、bash拡張されていないパターンを渡すのではなく、シェルオプションをls設定します。failglob

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"

関連情報