Saya Mencoba menghapus file yang dimulai dengan A dan diakhiri dengan 2 angka tetapi tidak berhasil.
Apa yang saya coba:
rm ^A*[0..9]2$
Dimana saya salah
Anda dapat menggunakan perintah berikut untuk menghapus semua file yang cocok dengan kriteria Anda:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
Bagaimana itu bekerja:
ls
daftar semua file (satu demi satu sejak hasilnya disalurkan).
grep -P "^A.*[0-9]{2}$"
memfilter daftar file dan hanya menyisakan yang cocok dengan ekspresi reguler ^A.*[0-9]{2}$
.*
menunjukkan jumlah kemunculan .
, di mana .
wildcard cocok dengan karakter apa pun.
[0-9]{2}
menunjukkan dengan tepat dua kemunculan [0-9]
, yaitu digit apa saja.
xargs -d"\n" rm
dijalankan rm line
sekali untuk setiap line
yang disalurkan ke sana.
Dimana saya salah
Sebagai permulaan, rm
tidak menerima ekspresi reguler sebagai argumen. Selain wildcard *
, setiap karakter lain diperlakukan secara harfiah.
Juga, ekspresi reguler Anda sedikit tidak aktif. Misalnya, *
berarti setiap kejadian ...
dalam ekspresi reguler, sehingga A*
pertandingan A
, AA
, dll dan bahkan string kosong.
Untuk informasi lebih lanjut, kunjungi Regular-Expressions.info .
-d"\n
saklar perbaikan masalah ruang.grep -P
(Perl regex).grep -E
dapat bekerja dalam kasus ini.-I
denganxargs
dan selalu uji dengan perintah non-mematikan pertama:xargs -d"\n" -I {} echo "{}"
ls
? Lihat pertanyaan ini yang menunjuk ke artikel ini . Karena perangkap Anda mungkinrm
apa yang tidak Anda inginkan.Atau menggunakan
find
:Solusi ini akan menangani nama file yang aneh .
sumber
-type f
xargs
pendekatan denganrm -f
.Lihat bagian ekspansi nama file dari halaman bash man:
sumber
Solusi dengan regexp adalah 200 kali lebih baik, bahkan dengan itu Anda dapat melihat file mana yang akan dihapus sebelum menggunakan perintah, memotong pipa terakhir:
Maka jika benar gunakan saja:
Ini 200 kali lebih baik karena jika Anda bekerja dengan Unix, penting untuk mengetahui cara menggunakan grep. Ini sangat kuat jika Anda tahu cara menggunakannya.
sumber
Ini berfungsi di mac saya:
rm $(ls | grep -e '^A*[0..9]2$')
sumber
find
Perintah bekerja dengan regex juga.Periksa file mana yang akan dihapus
Hapus file
sumber