
基本的に、これら2つのコマンド行を追加したいのです
ls *[Aa]*
ls *[Bb]*
A と B (小文字または大文字) の両方が含まれ、それらが複数回出現する可能性があるファイルを探しています。
私が試したことは次のとおりです:
ls *[Aa]*&&*[Bb]*
答え1
括弧拡張の使用
1 つの方法は、中括弧展開を使用することです。次のファイルを含むディレクトリを考えてみましょう。
$ ls
1a2a3 1a2b3 1b2A3 1b2b3
a
両方といずれかを含むものを選択するにはb
:
$ ls *{[bB]*[aA],[aA]*[bB]}*
1a2b3 1b2A3
改善
考えられる問題は、オプションの 1 つに一致するファイルがない場合に、中括弧の展開がどのように動作するかです。次のファイルがあるディレクトリを考えてみましょう。
$ ls
1a2a3 1b2A3 1b2b3
それでは、コマンドを実行してみましょう:
$ ls *{[bB]*[aA],[aA]*[bB]}*
ls: cannot access '*[aA]*[bB]*': No such file or directory
1b2A3
この警告メッセージが気に入らない場合は、nullglob を設定すると警告メッセージが表示されなくなります。
$ shopt -s nullglob
$ ls *{[bB]*[aA],[aA]*[bB]}*
1b2A3
ただし、このアプローチの制限は、どちらの glob も一致しない場合はls
引数なしで実行され、結果としてすべてのファイルがリストされることです。
拡張グロブの使用
もう一度、次のファイルを含むディレクトリを考えてみましょう。
$ ls
1a2a3 1a2b3 1b2A3 1b2b3
さて、設定しましょうextglob
:
$ shopt -s extglob
そして、拡張グロブを使用してファイルを検索してみましょう。
$ ls *@([bB]*[aA]|[aA]*[bB])*
1a2b3 1b2A3
答え2
grep
助けを求めても構わないなら
ls *[aA]* | grep -i b
同様に行います。