Bagaimana cara menghapus semua file yang cocok dengan suatu pola?

76

Ketika saya kembali di Mercurial, ia meninggalkan beberapa .origfile. Saya ingin dapat menjalankan perintah untuk menghapus semuanya.

Saya telah menemukan beberapa sumber yang mengatakan untuk menjalankan:

rm **/*.orig

Tapi itu memberi saya pesan:

rm: tidak dapat menghapus `* / .orig ': Tidak ada file atau direktori tersebut

Saya juga sudah mencoba:

  • rm -rv *.orig

  • rm -R *\.orig

JD Isaacks
sumber

Jawaban:

149

Gunakan findperintah (dengan hati-hati!)

find . -name '*.orig' #-delete

Saya telah mengomentari perintah hapus tetapi setelah Anda puas dengan apa yang cocok, cukup hapus #dari baris dan itu harus menghapus semua file itu.

Oli
sumber
Apakah itu bekerja secara rekursif?
Frank Barcenas
2
@ FrankBarcenas Ya - temukan melakukan semuanya secara rekursif. Jika Anda ingin membatasi cara kerjanya, Anda bisa bermain dengan -maxdepthatau -mindepthargumen.
Oli
6
Pasti meninggalkan -deletedi ujung bendera. find . -delete -name '*.orig'akan mengabaikan filter dan merusak seluruh direktori Anda.
Michael
1
@Michael, ya. Saya sudah memecahkan masalah dengangit clean -fdx
kyb
1
@kamal aku mungkin masih menggunakan menemukan tetapi dengan yang -regexatau -iregexpredikat. Mem-parsing nama file (saat Anda mem-pipkannya) terkadang sulit dilakukan dengan aman.
Oli
6

"find" memiliki beberapa teknik yang sangat canggih untuk mencari melalui semua atau direktori saat ini dan file rm.

find ./ -name ".orig" -exec rm -rf {} \;
pengguna2038042
sumber
3
Apa manfaatnya menggunakan -delete?
muru
@uru Saya kira Anda akan mendapatkan prompt untuk setiap file jika Anda menghapus -rf.
Peter
@ Peter belum tentu. Meski begitu, begitu? Jawabannya menggunakan -rf, dan findtelah -ok.
muru
@muru sepertinya -delete tidak menghapus folder
Andrii Karaivanskyi
@AndriiKaraivanskyi kecuali penghapusan gagal, ya.
muru
1

Saya telah menghapus semua file yang dimulai dengan .nfs000000000 seperti ini

rm .nfs000000000*
Taras Vaskiv
sumber