2011-09-22 16 views
6

orada INVERS bash v4 kabuk genişleme, yani ele almanın bir yolu var mı. Tüm dosyaları bir joker karakter gibi değil mi? Ben rm için bu durumda biçimi 'Folder-???' olmayan bütün dosyaları ihtiyaç ve orada olup olmadığını merak daha kısa (yani. Yerleşik) yolu daha sonrabash: Ters (yani, değil) kabuk joker genişleme?

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

döngü yapıyor.

+0

Bunu yapamam korkuyorum ve var bunun yerine düzenli ifadeleri kullanmak. arasında – TMS

+0

olası yinelenen [nasıl ters veya negatif joker karakterler kullanabilirsiniz zaman bir unix/linux kabuğunda desen eşleştirme?] (http://stackoverflow.com/questions/216995/how-can-i-use-inverse-or-negative -wildcards-zaman-desen eşleştirme-in-a-unix Linu) – Johan

+1

@Tomas yanlış; extglobs tersine çevrilebilir. –

cevap

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

+1: Bunu bilmiyordum. –

3

@Dimitre partisi yüzünden right answer var ... Sadece bash öğrenme meraktan

(örnek ... Btw, çalışmıyor).

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

başka bash çözüm, ister 'find evirebilirsiniz Eğer find ile Tamam durumda [[ ... ]] (documentation)

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

@glenn Merhaba, sadece her iki durumda da eklemek: ... 'vaka degisken' ve _varname_ iç '[[...]]' hiçbir kabuk kelime/alan yarılma yapılır, böylece tanımlayıcı olması gerekmez alıntı (ve bu bağlamda alıntı, elbette, ya da zararlı değildir). –

2

içindeki desen eşleştirme operatörü kullanmaktır: Taşınabilir çözüm case kullanmaktır s -not ile tahmin eder.

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

olduğu gibi

(bu glob eşleştirme kabuk diğer farklılıklar arasında yinelemeli maçları dikkat ama yeterince iyi find bildiğinizi varsayıyorum)

İlgili konular