GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghapus banyak file sekaligus di Bash di Linux?

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 kuat daripada wildcard; Anda dapat memberi makan output dari grep ke rm -f . Misalnya, jika beberapa nama file dimulai dengan "abc.log" dan beberapa dengan "ABC.log" , grep memungkinkan Anda melakukan pencocokan case-insensitive:

$ rm -f $(ls | grep -i '^abc\.log\.')

Ini akan menimbulkan masalah jika ada nama file yang mengandung karakter lucu, termasuk spasi. Hati-hati.

Ketika saya melakukan ini, saya menjalankan ls | grep ... perintah terlebih dahulu dan periksa apakah 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 !! memperluas 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 $(...) sintaksis. Anda dapat menggunakan sintaks backtick yang setara:

$ rm -f `ls | grep -i '^abc\.log\.'`

$(...) sintaks lebih mudah dibaca, dan jika Anda benar-benar berambisi, itu dapat disarangkan.

Terakhir, jika subkumpulan file yang ingin Anda hapus tidak dapat dengan mudah diekspresikan dengan ekspresi reguler, trik yang sering saya gunakan adalah membuat daftar 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, lalu:

$ 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 kutipan jika diperlukan, misalnya mengubah rm -f foo bar menjadi rm -f 'foo bar' .


Cukup gunakan pemilihan multiline di sublime untuk menggabungkan semua file menjadi satu baris dan tambahkan spasi di antara setiap nama file lalu tambahkan rm di awal daftar. Ini sangat berguna jika tidak ada pola pada nama file yang ingin Anda hapus.

[$]> rm abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28 abc.log.2012-03-29 abc.log.2012-03-30 abc.log.2012-04-02 abc.log.2012-04-04 abc.log.2012-04-05 abc.log.2012-04-09 abc.log.2012-04-10

Bash mendukung semua jenis karakter pengganti dan perluasan.

Kasus persis Anda akan ditangani oleh ekspansi brace, seperti:

$ rm -rf abc.log.2012-03-{14,27,28}

Di atas akan meluas ke satu perintah dengan ketiga argumen, dan setara dengan mengetik:

$ rm -rf abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28

Perlu diperhatikan bahwa perluasan ini dilakukan oleh shell, sebelum rm bahkan dimuat.


Gunakan karakter pengganti (* ) untuk mencocokkan beberapa file.

Misalnya, perintah di bawah ini akan menghapus semua file dengan nama yang diawali dengan abc.log.2012-03- .

rm -f abc.log.2012-03-*

Saya akan merekomendasikan menjalankan ls abc.log.2012-03-* untuk membuat daftar file sehingga Anda dapat melihat apa yang akan dihapus sebelum menjalankan rm perintah.

Untuk detail selengkapnya, lihat halaman manual Bash tentang perluasan nama file.


Linux
  1. Cara Menghapus File BESAR (100-200GB) di Linux

  2. Cara Mengganti Nama Banyak File Sekaligus di Linux

  3. Cara Memutar File Log Apache di Linux

  1. Cara Mengelola File Log Menggunakan Logrotate Di Linux

  2. Cara Menulis File Log Di RAM Menggunakan Log2ram Di Linux

  3. Cara gzip semua atau file tertentu di Linux

  1. Cara Menemukan Dan Menghapus File Duplikat Di Linux

  2. Cara Membuat Zip Banyak File di Linux

  3. Cara Mengganti Nama Banyak File Bersama di Linux Menggunakan 3 Metode