Ini cara yang aman:
grep -lrIZ foo . | xargs -0 rm -f --
-l
mencetak nama file dari file yang cocok dengan pola pencarian.
-r
melakukan pencarian rekursif untuk pola foo
di direktori yang diberikan .
. Jika ini tidak berhasil, coba -R
.
-I
(modal i
) menyebabkan file biner seperti PDF dilewati.
-Z
memastikan bahwa nama file nol- (yaitu, nul-) diakhiri sehingga nama yang mengandung spasi tidak ditafsirkan dengan cara yang salah (yaitu, sebagai beberapa nama, bukan satu).
xargs -0
mengumpankan nama file dari grep
menjadi rm -f
, memisahkan kata dengan nol (nul) byte (ingat -Z
opsi dari grep
).
--
sering dilupakan tetapi sangat penting untuk menandai akhir opsi dan memungkinkan penghapusan file yang namanya dimulai -
.
Jika Anda ingin melihat file mana yang akan dihapus, cukup hapus | xargs -0 rm -f --
bagian itu, dan tinggalkan Z
opsi untuk grep
.
Pengguna lain menyarankan sesuatu seperti yang berikut, yang tidak boleh Anda jalankan karena tidak aman:
files=`grep foo * | cut -d: -f1`
rm -f $files # unsafe, do not run it!
Jika saya memiliki file ImportantStuff
yang saya tidak ingin hapus dan obsolete ImportantStuff
mengandung foo
, maka saya kehilangan ImportantStuff
(dan tidak obsolete ImportantStuff
!) Ketika saya menjalankan perintah ini, karena $files
rusak di ruang ketika ditafsirkan. Berbahaya memasukkan daftar nama file ke dalam variabel skalar shell dengan cara ini.