-delete
-depth
bunun işe yaramadığı anlamına gelir -prune
( -depth
yapraklarla başlar). GNU sürüm kılavuzunda bununla ilgili bir uyarı var ( -delete
şimdi GNU find
ve diğer birkaç uygulama tarafından da desteklenen bir FreeBSD uzantısıdır ).
info find --index-search=-delete
Komut satırında '-delete' eyleminin kullanımı otomatik olarak '-depth' seçeneğini açar (* not ifadeleri bul: :). Daha önce sadece '-print' ile test yapıyorsanız bu şaşırtıcı olabilir, bu nedenle '-depth' 'i açıkça kullanmayı unutmamak genellikle en iyisidir.
info find --index-search=-prune
'-Delete', '-depth' anlamına geldiğinden, '-prune' öğesinin '-delete' ile birlikte kullanılması, istediğinizden daha fazla dosyanın silinmesine neden olabilir.
Burada, rm
bunun yerine aşağıdakilerden birini kullanma seçeneğiniz vardır :
find . -name save -prune -o -type f -exec rm -f {} +
(potansiyel olarak güvenli olmayan bir sen o komutu çalıştırmak yaparken sembolik bağları dizinleri değiştirerek geçerli dizin ağacının dışında dosyaları silmek yapabiliriz orada başkaları tarafından dizini yazılabilir, varsa).
Daha güvenli bir alternatif:
find . -name save -prune -o -type f -execdir rm -f -- {} \;
Bunun yukarıda belirtilen sorunu yoktur, ancak rm
dosya başına bir tane çalıştırılması anlamına gelir . --
FreeBSD uygulanması değil, GNU biri olduğunu önekleri dosya adları ile için gereklidir ./
.
Alternatif olarak, Costas tarafından önerildiği gibi:
LC_ALL=C find . ! -name save ! -path '*/save/*' -type f -delete
(ama yine de gereksiz yere save
dizinlere iner )
Bu LC_ALL=C
nedenle, *
herhangi bir bayt dizisiyle eşleşir (geçerli yerel ayarda geçerli karakterler oluşturmayanlar bile). Hata mesajlarının dilini etkileyeceğini unutmayın (kullanıcının dili yerine İngilizce).
mv save/ ../some/safer/location
böyle bir "genel" silme komutundan önce basit bir tavsiye ((ama tabii ki, senin yazıdan önce ben aynı kontrolü yapardı ve aynı sorunla karşılaşmıştı!). Şimdi gidin dosya sistemi için iyi bir "silme geri" bulmak ^^