Terkadang Anda mengalami situasi di mana Anda perlu menghapus semua file dalam direktori atau cukup membersihkan direktori dengan menghapus semua file kecuali file dari jenis tertentu (diakhiri dengan ekstensi tertentu).
Pada artikel ini, kami akan menunjukkan kepada Anda cara menghapus file di direktori kecuali ekstensi atau jenis file tertentu menggunakan rm , temukan dan mengabaikan perintah.
Sebelum kita melangkah lebih jauh, mari kita mulai dengan melihat secara singkat satu konsep penting di Linux – pencocokan pola nama file, yang akan memungkinkan kita untuk menangani masalah yang kita hadapi.
Disarankan Baca: Gunakan perintah find untuk Mencari Beberapa Nama File/Ekstensi di Linux
Di Linux, pola shell adalah string yang terdiri dari karakter khusus berikut, yang disebut sebagai wildcard atau metakarakter :
*
– cocok dengan nol atau lebih karakter?
– cocok dengan karakter tunggal apa pun[seq]
– cocok dengan karakter apa pun di seq[!seq]
– cocok dengan karakter apa pun yang tidak berurutan
Ada tiga kemungkinan metode yang akan kita jelajahi di sini, dan ini termasuk:
Hapus File Menggunakan Operator Pencocokan Pola yang Diperluas
Operator pencocokan pola yang diperluas yang berbeda tercantum di bawah ini, di mana daftar pola adalah daftar yang berisi satu atau lebih nama file, dipisahkan menggunakan |
karakter:
*(pattern-list)
– cocok dengan nol atau lebih kemunculan pola yang ditentukan?(pattern-list)
– cocok dengan nol atau satu kemunculan pola yang ditentukan- +(daftar pola) – cocok dengan satu atau lebih kemunculan pola yang ditentukan
@(pattern-list)
– cocok dengan salah satu pola yang ditentukan!(pattern-list)
– cocok dengan apa pun kecuali salah satu pola yang diberikan
Untuk menggunakannya, aktifkan extglob opsi shell sebagai berikut:
# shopt -s extglob
1. Untuk menghapus semua file dalam direktori kecuali nama file, ketik perintah di bawah ini:
$ rm -v !("filename")
2. Untuk menghapus semua file kecuali namafile1 dan namafile2 :
$ rm -v !("filename1"|"filename2")
3. Contoh di bawah ini menunjukkan cara menghapus semua file selain semua .zip
file secara interaktif:
$ rm -i !(*.zip)
4. Selanjutnya, Anda dapat menghapus semua file dalam direktori selain dari semua .zip
dan .odt
file sebagai berikut, sambil menampilkan apa yang sedang dilakukan:
$ rm -v !(*.zip|*.odt)
Setelah Anda memiliki semua perintah yang diperlukan, matikan extglob opsi shell seperti ini:
$ shopt -u extglob
Menghapus File Menggunakan Linux find Command
Di bawah metode ini, kita dapat menggunakan perintah find secara eksklusif dengan opsi yang sesuai atau bersama dengan xargs perintah dengan menggunakan pipa seperti dalam bentuk di bawah ini:
$ find /directory/ -type f -not -name 'PATTERN' -delete $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {} $ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}
5. Perintah berikut akan menghapus semua file selain .gz
file di direktori saat ini:
$ find . -type f -not -name '*.gz'-delete
6. Menggunakan pipa dan xargs , Anda dapat memodifikasi kasus di atas sebagai berikut:
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
7. Mari kita lihat satu contoh tambahan, perintah di bawah ini akan menghapus semua file kecuali .gz
, .odt
, dan .jpg
file di direktori saat ini:
$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
Hapus File Menggunakan Variabel Bash GLOBIGNORE
Namun pendekatan terakhir ini, hanya berfungsi dengan bash. Di sini, GLOBIGNORE variabel menyimpan daftar pola yang dipisahkan titik dua (nama file) untuk diabaikan oleh perluasan nama jalur.
Disarankan Baca: 12 Contoh Praktis yang Berguna tentang Perintah Grep di Linux
Untuk menggunakan metode ini, pindah ke direktori yang ingin Anda bersihkan, lalu setel GLOBIGNORE variabel sebagai berikut:
$ cd test $ GLOBIGNORE=*.odt:*.iso:*.txt
Dalam hal ini, semua file selain .odt
, .iso
, dan .txt
file dengan dihapus dari direktori saat ini.
Sekarang jalankan perintah untuk membersihkan direktori:
$ rm -v *
Setelah itu, matikan GLOBIGNORE variabel:
$ unset GLOBIGNORE
Catatan :Untuk memahami arti dari flag yang digunakan dalam perintah di atas, lihat halaman manual dari setiap perintah yang telah kita gunakan dalam berbagai ilustrasi.
Itu saja! Jika Anda memiliki teknik baris perintah lain untuk tujuan yang sama, jangan lupa untuk berbagi dengan kami melalui bagian masukan kami di bawah.