Hapus file yang cocok di semua subdirektori

77

Bagaimana saya bisa menghapus semua file .swp di semua subdirektori saya di Linux?

Alex
sumber
3
Jangan lupa melihat program seperti trash-cli sehingga Anda dapat membatalkan penghapusan, daripada menggunakan rm. code.google.com/p/trash-cli (Anda baru saja mengganti 'rm' dengan 'trash' di semua jawaban di bawah ini.)

Jawaban:

137

Hapus semua file * .swp di bawah direktori saat ini, gunakan findperintah di salah satu bentuk berikut:

  • find . -name \*.swp -type f -delete

    The -deletepilihan berarti menemukan akan langsung menghapus file yang cocok. Ini adalah kecocokan terbaik dengan pertanyaan aktual OP.

    Menggunakan -type fmeans find hanya akan memproses file.

  • find . -name \*.swp -type f -exec rm -f {} \;
    find . -name \*.swp -type f -exec rm -f {} +

    Opsi -execmemungkinkan find untuk mengeksekusi perintah arbitrer per file. Varian pertama akan menjalankan perintah sekali per file, dan yang kedua akan menjalankan perintah sesedikit mungkin dengan mengganti {}parameter sebanyak mungkin.

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

    Piping output ke xargsdigunakan dari perintah per-file yang lebih kompleks daripada yang mungkin dengan -exec. Opsi -print0memberi tahu finduntuk memisahkan kecocokan dengan ASCII NULL alih-alih baris baru, dan -0memberi tahu xargsuntuk mengharapkan input yang dipisahkan NULL. Ini membuat konstruksi pipa aman untuk nama file yang mengandung spasi putih.

Lihat man finddetail dan contoh lebih lanjut.

Lachlan Roche
sumber
16

find . -name '*.swp' -delete

Setelah ditemukan, hapus itu sendiri menghilangkan risiko ruang yang disematkan dalam nama file, ... Untuk keamanan tambahan, pertimbangkan -type funtuk menambahkan file saja.

Zeograd
sumber
4
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
pengguna31894
sumber
2

Untuk mencari di bawah direktori home saya (dan menggunakan GNU 'find' dan 'xargs'), saya akan menggunakan:

find $HOME -name '*.swp' -print0 | xargs -0 rm -f

Penggunaan ' -print0' dan ' -0' berarti bahwa nama-nama akan dibatasi oleh karakter ASCII NUL '\ 0', dan ini akan menangani jalur file dengan kosong dll dalam namanya. Jika Anda merasa memiliki direktori (atau file perangkat, atau FIFO, atau non-file lainnya) di bawah direktori Anda yang diakhiri dengan '.swp', Anda dapat menambahkan opsi ' -type f' untuk 'menemukan'. Jika Anda hanya memiliki direktori, perintah di atas akan gagal menghapusnya dengan berisik.

Jonathan Leffler
sumber