Mouviciel'in cevabının bir takibi olarak, bunu xargs kullanmak yerine for döngüsü olarak da yapabilirsiniz. Xargs'ı hantal buluyorum, özellikle de her bir yinelemede daha karmaşık bir şey yapmam gerekirse.
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm $f; done
Bazı kişilerin yorumladığı gibi, dosya adlarında boşluk varsa bu başarısız olur. Geçici olarak IFS'yi (dahili alan ayırıcısı) yeni satır karakterine ayarlayarak bu sorunu çözebilirsiniz. \[?*
Dosya adlarında joker karakterler varsa bu da başarısız olur . Joker karakter genişletmeyi (globbing) geçici olarak devre dışı bırakarak bu sorunu çözebilirsiniz.
IFS=$'\n'; set -f
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm "$f"; done
unset IFS; set +f
Dosya adlarınızda yeni satırlar varsa, bu da çalışmaz. Xargs tabanlı bir çözümle daha iyi durumdasınız:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -print0 | xargs -0 rm
(Burada kaçan köşeli parantezlerin her -print0
iki or
maddeye de uygulanması gerekir .)
GNU ve * BSD find'ın da şöyle bir -delete
eylemi vardır :
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -delete
rm
OP kodunun bir parçası olduğunu biliyorum , ama aslında sorulan soru ile ilgili değil. Cevaplar gibi zararsız bir komutla ifade edilmesinin daha güvenli olacağını düşünüyorumecho
.