名前に「a」、「b」、または「c」が含まれていないこのディレクトリのすべてのファイル名を見つけます。

名前に「a」、「b」、または「c」が含まれていないこのディレクトリのすべてのファイル名を見つけます。

a、b、またはc文字を含まないディレクトリ内のすべてのファイルを見つけようとします。なぜこのコマンドが機能しないのですか?

ls *[!abc]*

例:例:MATCH:xyz、dkh、file、fooが一致しません:bar、bxc、azi、csk

ベストアンサー1

あなたのコマンドはあなたが望むものと非常によく似た仕事をします。つまり、ファイル名のリストに展開されます。いいえ正確に言えばa、、、bまたはc。テストすると、以下が表示されます。

$ touch a b c d
$ ls *[!abc]*
d

ただし、別のファイルを作成して再テストする場合:

$ touch argh
$ ls *[!abc]*
argh d

これらの文字を含むファイル名をどこからでも除外するには、次のようにします。

$ shopt -s extglob
$ ls !(*[abc]*)
d

拡張globを使用する別のアプローチは、パターンを明示的にリストすることです。

$ ls !(*a*|*b*|*c*)
d

おすすめ記事