括弧拡張の使用

括弧拡張の使用

基本的に、これら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

同様に行います。

関連情報