Bagaimana cara menghapus semua file dengan nama yang diberikan di semua subdirektori?

25

Saya ingin menghapus semua file dengan nama yang diberikan di semua subdirektori dari direktori home saya.

Saya mencoba:

rm -r file

di direktori home saya, tetapi tidak berfungsi karena file itu tidak ada di direktori itu.

oadams
sumber

Jawaban:

36

find . -name "filename" -delete

tante
sumber
12

sebagai uraian jawaban @ tante, Anda mungkin ingin memastikan daftar file yang digunakan sudah benar sebelum menghapus file-file itu:

find <source_dir> -name <filename> -print

jika inspeksi menunjukkan daftar yang valid, maka

find <source_dir> -name <filename> -delete

pilihan lain jika menginginkan ini di banyak direktori menggunakan direktori holding sementara:

mkdir <dest_dir>
for i in <list_of_directories>
do
  find "$i" -name <filename> -exec /bin/mv {} <dest_dir>
done

# check dest_dir
ls dest_dir
rm -rf <dest_dir>

Seperti biasa, harap pastikan keakuratan skrip apa pun sebelum eksekusi dan selalu siapkan cadangan jika-kalau terjadi kesalahan.

Wayne
sumber
3
selalu letakkan tanda kutip ganda di sekitar substitusi variabel, atau perintah Anda tidak akan berfungsi dengan nama file yang berisi karakter khusus tertentu (spasi putih, wildcard, dan backslash).
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles - Ya, terima kasih telah memperbarui dan memastikan jawaban ini benar.
Wayne