Sebagai tindak lanjut dari jawaban mouviciel, Anda juga bisa melakukan ini sebagai for for, alih-alih menggunakan xargs. Saya sering menemukan xargs rumit, terutama jika saya perlu melakukan sesuatu yang lebih rumit di setiap iterasi.
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm $f; done
Seperti yang dikomentari sejumlah orang, ini akan gagal jika ada spasi dalam nama file. Anda dapat mengatasi ini dengan mengatur sementara IFS (internal field seperator) ke karakter baris baru. Ini juga gagal jika ada karakter wildcard \[?*
dalam nama file. Anda dapat mengatasinya dengan menonaktifkan sementara ekspansi wildcard (globbing).
IFS=$'\n'; set -f
for f in $(find /tmp -name '*.pdf' -or -name '*.doc'); do rm "$f"; done
unset IFS; set +f
Jika Anda memiliki baris baru dalam nama file Anda, maka itu tidak akan berhasil. Anda lebih baik dengan solusi berbasis xargs:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -print0 | xargs -0 rm
(Kurung yang lolos diperlukan di sini untuk memiliki -print0
berlaku untuk kedua or
klausa.)
GNU dan * BSD find juga memiliki -delete
aksi, yang akan terlihat seperti ini:
find /tmp \( -name '*.pdf' -or -name '*.doc' \) -delete
rm
adalah bagian dari kode OP, tetapi sebenarnya tidak relevan dengan pertanyaan yang diajukan. Saya pikir akan lebih aman jika jawaban diungkapkan menggunakan perintah yang tidak berbahayaecho
.