ワイルドカード拡張の補完的な結果を得るには?
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つを除くすべての項目と一致