Bagaimana cara menghapus file pada baris perintah dengan ekspresi reguler?


18

Katakanlah saya memiliki 20 file bernama FOOXX, di mana XX adalah jumlah file, misalnya 01, 02 dll.

Saat ini, jika saya ingin menghapus semua file lebih rendah dari angka 10, ini mudah dan saya hanya menggunakan wildcard, misalnya rm FOO0 *

Namun, jika saya ingin menghapus file tertentu dalam kisaran, misalnya 13-15, ini menjadi lebih sulit.

rm FPP [13-15] tidak berfungsi, dan bertanya apakah saya ingin menghapus semua file. Likewse rm FOO1 [3-5] ingin menghapus semua file yang dimulai dengan FOO1

Jadi, apa cara terbaik untuk menghapus rentang file seperti ini?

Saya telah mencoba dengan bash dan zsh, dan saya tidak berpikir mereka sangat berbeda untuk tugas dasar seperti itu?


"... rm FOO1 [3-5] ingin menghapus semua file yang dimulai dengan FOO1" Ini tidak masuk akal, dan tentu saja tidak demikian di sini.
Ignacio Vazquez-Abrams

@Ignacio yeah- Saya ingin melihat set karakter memiliki urutan pemeriksaan!
kmarsh

Jawaban:


31

Dalam bash Anda dapat menggunakan:

rm FOO1 {3..5}

atau

rm FOO1 {3,4,5}

untuk menghapus FOO13, FOO14 dan FOO15.

Penjepit ekspansi Bash didokumentasikan di sini .


2
Atau bahkan rm FOO{13..15}.
Ignacio Vazquez-Abrams

Apakah ini juga berlaku untuk ZSH?
Jack


@ Jack: bashperintah membentuk subset dari zperintah shell.
abhinavkulkarni

Jadi saya perlu belajar baik regex dan globbing sintaks. Huu huu. :)
Aditya MP

13

Untuk pembaca masa depan, findperintah ini juga dapat menghapus file. Saya menyelesaikan ini untuk masalah yang sama:

find . -type f -regex '...' -delete

tetapi jawaban yang dipilih adalah jawaban paling sederhana untuk pertanyaan ini.


Jawaban yang dipilih hanya baik untuk file yang mengikuti konvensi penamaan. Berkat jawaban Anda, saya bisa menghapus semua file objek dalam direktori. (dalam kasus saya, saya hanya pergi dengan find . -name "*.o" -deletedan itu bekerja seperti pesona)
John Hamilton

6

ls | grep regex | xargs rm


6
Anda harus menggunakan find -regex ... -print0 | xargs -0 ...ini, jika tidak, gagal untuk nama file dengan spasi.
Dijeda sampai pemberitahuan lebih lanjut.

1
Tentu saja, jika Anda akan menggunakan findmaka Anda mungkin juga hanya menggunakan -exec.
Ignacio Vazquez-Abrams

Dalam kasus saya file memiliki spasi, dan mengubah pembatas memperbaiki masalah spasi: ls | grep regex | xargs --delimiter = '\ n' rm
Anake


@ evilsoup, +1 untuk menambahkan peringatan itu, tetapi, siapa yang menyisipkan baris baru dalam nama file?
Iulian Onofrei
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.