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.