GNU/Linux >> Belajar Linux >  >> Linux

Cara Menghapus File dengan Ekstensi Tertentu di Baris Perintah Linux

Anda mungkin memiliki situasi di mana Anda ingin menghapus beberapa file yang memiliki ekstensi tertentu. Tutorial ini akan membantu Anda melakukan hal itu.

Anda menggunakan perintah rm untuk menghapus file dan folder dengan cara berikut:

rm [option] filename

Sepertinya Anda perlu mengetahui nama file yang tepat di sini, tetapi itu tidak benar.

Mari saya tunjukkan beberapa metode untuk menghapus banyak file berdasarkan ekstensi filenya.

Metode 1:Hapus file dengan ekstensi menggunakan perintah rm

Dalam contoh saya, saya memiliki banyak file gif yang diakhiri dengan ekstensi .gif.

Untuk menghapusnya, saya dapat menggunakan perintah rm seperti ini:

rm *.gif

Menghapus file secara membabi buta seperti itu bisa berisiko. Itu selalu baik untuk terlebih dahulu melihat file apa yang akan dihapus menggunakan perintah ls:

ls *.gif

Berikut cara menghapus file dengan ekstensi .gif:

$ ls
1.gif  2.gif  3.gif  4.gif  a.jpg  b.png  c.webp

$ ls *.gif
1.gif  2.gif  3.gif  4.gif


$ rm -v *.gif
removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'

$ ls
a.jpg  b.png  c.webp

Ini dapat dilakukan untuk semua ekstensi file, bukan hanya .gif. Anda bahkan dapat menggabungkan beberapa ekstensi.

$ ls
f1.txt  f2.txt  f3.txt  f4.txt  not-txt-file.pdf random.txt


$ rm -v *.txt *.pdf
removed 'f1.txt'
removed 'f2.txt'
removed 'f3.txt'
removed 'f4.txt'
removed 'not-txt-file.pdf'

$ ls
random.txt
Anda dapat menggunakan opsi -i interaktif dengan perintah rm yang meminta konfirmasi sebelum menghapus setiap file. Namun, ini mungkin tidak nyaman jika Anda memiliki banyak file untuk dihapus.

Bertanya-tanya bagaimana cara kerjanya? Wildcard!

Singkatnya, wildcard adalah karakter khusus yang Anda gunakan untuk mencocokkan pola tertentu. Di bawah ini adalah beberapa wildcard yang sering digunakan:

Wilcard Gunakan
* Cocokkan satu atau lebih kejadian
? Mencocokkan satu kejadian
[] (Kurung persegi) Tentukan rentang untuk pencocokan
^ Kecualikan dari pertandingan

Anda telah menggunakan * wildcard di sini yang berarti dapat mencocokkan satu atau lebih kemunculan karakter apa pun.

Saat Anda mengucapkan *.gif , artinya kombinasi huruf apa saja yang mengarah ke .gif . Dengan kata lain, ini memberi Anda semua file dengan ekstensi .gif .

Setiap wildcard dapat digunakan sebagai tambahan untuk satu wildcard lagi. Tapi mari kita tidak membahas detail itu sekarang.

Titik antara * dan ekstensi itu penting!

Banyak orang melakukan kesalahan dengan mengacaukan *.gif dengan *gif . Ini tidak benar. Titik (.) di antara * dan nama ekstensi sangat penting.

Ambil skenario dengan file-file berikut dan lihat apa yang terjadi ketika saya menggunakan regex *gif bukannya *.gif :

$ ls

1.gif  2.gif  3.gif  4.gif  definately-not-a-gif  jpg-not-gif  not-a-gif


$ rm -v *gif

removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'
removed 'definately-not-a-gif'
removed 'jpg-not-gif'
removed 'not-a-gif'

Itu juga menghapus file dengan string gif di dalamnya, meskipun itu bukan ekstensi file, itu hanya memiliki gif di akhir nama file tanpa titik sebelumnya.

Saat Anda menghapus file dengan karakter pengganti atau ekspresi reguler, harap pastikan bahwa Anda seakurat mungkin.

Metode 2:Hapus file secara rekursif dengan ekstensi tertentu menggunakan perintah find

Perintah rm hanya menghapus file di direktori saat ini. Itu tidak menghapus file dari subdirektori, bahkan dengan opsi rekursif.

Untuk menghapus file secara rekursif dengan ekstensi tertentu, Anda dapat menggabungkan perintah find dan perintah rm:

Berikut adalah contoh di mana saya memiliki file .gif di subdirektori juga.

$ ls *
file_0.gif  file_z.txt  not-a-gif  not-a-txt

dir1:
file_1.gif  file_a.txt  not-a-gif  not-a-txt

dir2:
file_2.gif  file_b.txt  not-a-gif  not-a-txt

dir3:
file_3.gif  file_c.txt  not-a-gif  not-a-txt

dir4:
file_4.gif  file_d.txt  not-a-gif  not-a-txt

Untuk menghapus file, Anda dapat menggunakan perintah find seperti ini:

find . -type f -name "*.gif" -exec rm -v {} \;

Inilah output ketika saya menjalankan perintah:

$ find . -type f -name "*.gif" -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir3/file_3.gif'
removed './dir2/file_2.gif'
removed './file_0.gif'
removed './dir4/file_4.gif

Mari kita hancurkan.

  • Periode setelah "find" berarti mencari di direktori saat ini
  • Bendera "-name" menentukan nama file, tempat kita dapat menggunakan regex
  • Bendera "-exec" digunakan untuk mengeksekusi perintah bash pada hasil perintah find
  • Kurung "{}" bertindak sebagai pengganti untuk hasil file yang cocok, jadi "rm -v {}" akan menghapus file yang perintah find ditemukan.
  • Akhirnya, titik koma mengakhiri perintah yang dijalankan oleh shell Anda (perintah setelah exec) dan garis miring terbalik '\' digunakan agar titik koma diloloskan dengan benar. Anda tidak perlu khawatir tentang ini.

Anda dapat mempelajari lebih banyak contoh perintah find dalam tutorial di bawah ini.

Tips Bonus Lanjutan:Gunakan perintah find untuk mengerjakan file dengan banyak ekstensi

Perintah yang ditunjukkan di atas tidak mencakup pencarian file dengan banyak ekstensi, seperti "rm *.gif *.txt"

Untuk mencapai itu, Anda dapat menggunakan -o argumen yang berarti 'logis OR operator'. Tapi kita juga harus menggunakan garis miring terbalik '\' untuk keluar dari tanda kurung

$ ls *
file_0.gif  file_z.txt  not-a-gif  not-a-txt

dir1:
file_1.gif  file_a.txt  not-a-gif  not-a-txt

dir2:
file_2.gif  file_b.txt  not-a-gif  not-a-txt

dir3:
file_3.gif  file_c.txt  not-a-gif  not-a-txt

dir4:
file_4.gif  file_d.txt  not-a-gif  not-a-txt

$ find . \( -name "*.gif" -o -name "*.txt" \) -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir1/file_a.txt'
removed './dir3/file_3.gif'
removed './dir3/file_c.txt'
removed './dir2/file_2.gif'
removed './dir2/file_b.txt'
removed './file_0.gif'
removed './file_z.txt'
removed './dir4/file_d.txt'
removed './dir4/file_4.gif'

Di sini, Anda dapat melihat bahwa semua file dengan ekstensi 'txt' dan file dengan ekstensi 'gif' dihapus, secara rekursif.

Saya tahu bahwa Anda akan merasa bahwa menggunakan perintah find secara terpisah untuk setiap jenis ekstensi file akan lebih mudah dan Anda tidak salah.

Kesimpulan

Artikel ini membahas penghapusan file dengan ekstensi tertentu. Kami juga melihat pencarian dan penghapusan file-file ini secara rekursif.

"Dengan kekuatan besar, datang tanggung jawab besar" , ingat ini ketika Anda menggunakan wildcard dan regex. Satu kesalahan ketik dan file penting mungkin terhapus secara tidak sengaja.


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

  2. Cara Mengganti Nama File di Linux

  3. Bagaimana Cara Menghapus Semua File Dengan Ekstensi Tertentu Di Folder Tertentu?

  1. Bagaimana Menyembunyikan File Dengan Ekstensi Tertentu?

  2. Cara Menemukan File dengan Perintah fd di Linux

  3. Bagaimana cara mengganti file di jar dengan baris perintah di linux?

  1. Kiat untuk membuat daftar file dengan ls di baris perintah Linux

  2. Cara Menemukan File di Linux Dengan Perintah Temukan

  3. Cara Menghapus File dan Direktori di Linux dari Command Line