Yazdıklarınız, yeni satırla ayrılmış dosya adlarının (ve yollarının) bir listesini rm
, ancak rm bu girdiyle ne yapılacağını bilmez. Sadece komut satırı parametrelerini bekliyor.
xargs
genellikle yeni satırlarla ayrılmış girdileri alır ve bunları komut satırına yerleştirir, bu nedenle xargs eklemek çalıştığınız şeyi yapar:
find . -name .svn | xargs rm -fr
xargs
yalnızca rm
kabul edebildiği kadar çok argüman iletecek kadar zekidir . Böylece, bir milyon dosyanız varsa,rm
1.000.000 / 65.000 kez (kabuğunuz {{kk için 65k dosya + 1 için -fr} komut satırında 65,002 bağımsız değişkeni kabul edebiliyorsa).
Kişilerin yeterince işaret ettiği gibi, aşağıdakiler de işe yarar:
find . -name .svn -exec rm -rf {} \;
find . -depth -name .svn -exec rm -fr {} \;
find . -type d -name .svn -print0|xargs -0 rm -rf
İlk iki -exec
form rm
silinen her bir klasörü çağırır , bu nedenle 1.000.000 klasörünüz varsa rm
1.000.000 kez çağrılır. Bu kesinlikle idealden daha az. Daha yeni uygulamalar rm
, komutu mümkün olduğunca çok sayıda argümanı kabul edecek bir +
göstergeyle sonuçlandırmanıza izin verir rm
:
find . -name .svn -exec rm -rf {} +
Son find / xargs sürümü, \0
bir satırsonu yerine sonlandırıcı olarak kullanılan find üretme çıktısı yapan print0 kullanır . POSIX sistemleri \0
dosya adında herhangi bir karaktere izin verdiğinden, argümanların doğru bir şekilde iletildiğinden emin olmanın en güvenli yolu budurrm
veya uygulamaya .
Ayrıca , temel dizinde değil, dosyanın bulunduğu dizinde -execdir
yürütülecek rm
ve -depth
önce derinliği başlatacak bir.