私のディレクトリには、次のようなさまざまな拡張子を持つファイルのリストがあります。
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
任意の名前に一致します。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"