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
xargsyalnızca rmkabul 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 -execform rmsilinen her bir klasörü çağırır , bu nedenle 1.000.000 klasörünüz varsa rm1.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ü, \0bir satırsonu yerine sonlandırıcı olarak kullanılan find üretme çıktısı yapan print0 kullanır . POSIX sistemleri \0dosya 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 -execdiryürütülecek rmve -depthönce derinliği başlatacak bir.