Jika Anda ingin menghapus semua file yang namanya cocok dengan formulir tertentu, wildcard (pola glob) adalah solusi yang paling mudah. Beberapa contoh:
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
Ekspresi reguler lebih efektif daripada karakter pengganti; Anda dapat memberi makan keluaran grep
ke rm -f
. Misalnya, jika beberapa nama file diawali dengan "abc.log"
dan beberapa dengan "ABC.log"
, grep
memungkinkan Anda melakukan pencocokan tidak peka huruf besar / kecil:
$ rm -f $(ls | grep -i '^abc\.log\.')
Ini akan menimbulkan masalah jika salah satu nama file mengandung karakter lucu, termasuk spasi. Hati-hati.
Ketika saya melakukan ini, saya menjalankan ls | grep ...
perintah terlebih dahulu dan memeriksa apakah itu menghasilkan output yang saya inginkan - terutama jika saya menggunakan rm -f
:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
di mana !!
meluas ke perintah sebelumnya. Atau saya bisa mengetik panah atas atau Ctrl-P dan mengedit baris sebelumnya untuk menambahkan rm -f
perintah.
Ini mengasumsikan Anda menggunakan bash shell. Beberapa shell lain, terutama csh dan tcsh dan beberapa shell turunan sh yang lebih lama, mungkin tidak mendukung $(...)
sintaks. Anda dapat menggunakan sintaks backtick yang setara:
$ rm -f `ls | grep -i '^abc\.log\.'`
The $(...)
sintaks lebih mudah dibaca, dan jika Anda benar-benar ambisius itu bisa bersarang.
Terakhir, jika subset file yang ingin Anda hapus tidak dapat dengan mudah diekspresikan dengan ekspresi reguler, trik yang sering saya gunakan adalah mencantumkan file ke file teks sementara, lalu mengeditnya:
$ ls > list
$ vi list # Use your favorite text editor
Saya kemudian dapat mengedit list
file secara manual, hanya menyisakan file yang ingin saya hapus, dan kemudian:
$ rm -f $(<list)
atau
$ rm -f `cat list`
(Sekali lagi, ini mengasumsikan tidak ada nama file yang mengandung karakter lucu, terutama spasi.)
Atau, saat mengedit list
file, saya dapat menambahkan rm -f
ke awal setiap baris dan kemudian:
$ . ./list
atau
$ source ./list
Mengedit file juga merupakan kesempatan untuk menambahkan tanda kutip jika perlu, misalnya mengubah rm -f foo bar
menjadi rm -f 'foo bar'
.