ワイルドカード否定

ワイルドカード否定

ワイルドカード拡張の補完的な結果を得るには?

roc名前に含まれるファイルを一覧表示するには、次のコマンドを実行します。

ls *roc*

rocしかし、その名前のないすべてのファイルが必要な場合はどうすればよいですか?

ls *[!r][!o][!c]*そしてls *[!roc]*

動作しません。この「反対」拡張を実行する簡単な方法はありますか?

注:私はbash

ベストアンサー1

bashシェルは、以下を使用して有効にすると拡張グロービングモードをサポートします。

shopt -s extglob

有効にすると、このパターンは、一致しない隠された名前ではなくすべての名前、つまり文字列を含まないすべての名前!(*roc*)と一致します。*roc*roc

bashマニュアルから:

extglob組み込みオプションを使用してシェルオプションを有効にすると、複数の拡張パターン一致演算shopt子が認識されます。次の説明では、aはpattern-listで区切られた1つ以上のパターンのリストです|。複合パターンは、次のサブパターンのうちの1つ以上を使用して形成できます。

?(pattern-list) 指定されたパターンがゼロまたは1つ発生するのと一致します。

*(pattern-list) 指定されたパターンのゼロ以上の発生と一致します。

+(pattern-list) 与えられたパターンと1つ以上一致します。

@(pattern-list) 与えられたパターンの1つと一致

!(pattern-list) 与えられたパターンの1つを除くすべての項目と一致

おすすめ記事