BashではFoo1.png
。Foo9.png
Foo[0-9].png
Foo5.png
Foo[1-46-9].png
Foo3.png
たとえば、およびを除外したい場合はFoo7.png
使用できますが、読みやすいパターンを見つけることがFoo[0-24-689]
できます。Foo[^37].png
これはVim構文なので、Bashはこれを解釈しません(3
および除く)7
。しかし、Bashのファイル名拡張子に文字除外パターンがあるかどうかを知りたいです。
適切な解決策がある場合みんな場合によっては、またはそれ以外の3
単一文字7
も役立つことがあります(上記の説明は過度に単純化されていますが、この問題を引き起こす特定の文字など)。
答え1
シェルはbash
正規表現に似たFoo[^37].png
パターンと標準シェルパターンを理解しているため、除外する必要がある類似または類似の名前を持つFoo[!37].png
他のファイルがない限り、問題なく使用できます。Food.png
Fool.png
Foo[^37].png
スクリプトが期待どおりに機能しない場合は、他のシェル(GNU以外のシステムでは?)を使用していないことを意味します。bash
コマンドラインからdash
スクリプトを実行しましたか?sh
その場合は、これを行わずに、#!
スクリプトで正しい-lineを使用して正しいシェルソルバーを指してください。
同様の名前を除外するには、名前の後に数字がFood.png
続くことを確認してからを使用します。除外するには別々にテストしてください。Foo
.png
Foo[0-9].png
Foo3.png
Foo7.png
for name in Foo[0-9].png; do
case $name in (*[37].png) continue; esac
# process "$name" here
done
またはbash
構文を使用して
for name in Foo[0-9].png; do
[[ $name == *[37].png ]] && continue
# process "$name" here
done
以下の説明でStéphane Chazelasが述べたように、拡張ワイルドカードパターンを使用しておよびそれ以外の数をbash
テストできます。以下を使用して拡張ワイルドカードモードを有効にします。3
7
shopt -s extglob
Foo!(!([0-9])|[37]).png
しかし、個人的にFoo[01245689].png
私はこの表現が正しいことをしていると信じています。