-delete-depthbunun işe yaramadığı anlamına gelir -prune( -depthyapraklarla başlar). GNU sürüm kılavuzunda bununla ilgili bir uyarı var ( -deleteşimdi GNU findve 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, rmbunun 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 rmdosya 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 savedizinlere iner )
Bu LC_ALL=Cnedenle, *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/locationbö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 ^^