2011-09-22 16 views
6

invers bash v4のシェル拡張を扱う方法はありますか?ワイルドカードではないすべてのファイルを扱いますか?私はrmに、この場合のフォーマット'Folder-???'でないすべてのファイルを必要とし、その後bash:逆(すなわち、NOT)シェルのワイルドカード展開?

for file in * 
do 
    [[ $i =~ \Folder-...\ ]] && rm '$i' 
done 

ループをやって短い(すなわち内蔵)方法があるかどうかと思いまして。

+0

私はあなたがそれを行うことはできません怖いと持っています代わりに正規表現を使用します。 – TMS

+0

可能な複製[unix/linuxシェルでのパターンマッチングの際にどうやって逆または負のワイルドカードを使うことができますか?](http://stackoverflow.com/questions/216995/how-can-i-use-inverse-or-negative -wildcards-when-unix-linuに一致するパターン) – Johan

+1

@Tomas; extglobsは可逆です。 –

答えて

14
shopt -s extglob 
rm -- !(Folder-???) 
+0

+1:そのことを知らなかった。 –

3

@Dimitreはbashのためのright answerを持っている...ただ、bashの学習好奇心のうち

(例は...ところで、動作しません)。

for file in *; do 
    case "$file" in 
    Folder-???) : ;; 
    *) do stuff here ;; 
    esac 
done 

別のbashのソリューションは、あなたが「findを反転することができますが、findでOKの場合には[[ ... ]]documentation

for file in *; do 
    if [[ "$file" != Folder-??? ]]; then 
    do stuff here 
    fi 
done 
+0

こんにちは@glennさん、ちょうど 'case varname ...'と '[[...]]'の中の_varname_の両方でそれを追加するだけです。シェルワード/フィールドの分割は行われないので、識別子は必ずしも必要ではありません引用されています(この文脈での引用はもちろん害ではありません)。 –

2

内のパターン・マッチング演算子を使用することです:ポータブルソリューションはcase使用することですsの述語は-notです。

find -not -name 'Folder-???' -delete 

と同様に

(これはグロブマッチングをシェルに他の違いの中で再帰的に一致しますが、私はあなたが十分findを知っていると仮定)

関連する問題