私のディレクトリには、次のようなさまざまな拡張子を持つファイルのリストがあります。
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
すべての名前と一致します。abc
out
パターンに一致するファイルが存在しない場合、パターンは拡張されていません。これが発生すると、パターンは有効なファイル名の代わりに引数としてls
取得されます。*abc*out
ls: 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"