3 Cara Menghapus Semua File dalam Direktori Kecuali Satu atau Beberapa File Berekstensi


Terkadang Anda masuk ke situasi di mana Anda perlu menghapus semua file dalam direktori atau sekadar membersihkan direktori dengan menghapus semua file kecuali file dengan tipe tertentu (diakhiri dengan ekstensi tertentu).

Pada artikel ini, kami akan menunjukkan cara menghapus file dalam direktori kecuali ekstensi atau jenis file tertentu menggunakan perintah rm, find, dan globignore.

Sebelum melangkah lebih jauh, mari kita mulai dengan melihat secara singkat satu konsep penting di Linux – pencocokan pola nama file, yang akan memungkinkan kita mengatasi masalah yang ada.

Bacaan yang Disarankan: Gunakan Perintah find untuk Mencari Banyak Nama File/Ekstensi di Linux

Di Linux, pola shell adalah string yang terdiri dari karakter khusus berikut, yang disebut sebagai wildcard atau metacharacters:

  1. * – cocok dengan nol karakter atau lebih
  2. ? – cocok dengan karakter apa pun
  3. [seq] – cocok dengan karakter apa pun di seq
  4. [!seq] – cocok dengan karakter apa pun yang tidak ada dalam urutan

Ada tiga kemungkinan metode yang akan kita bahas di sini, dan ini termasuk:

Hapus File Menggunakan Operator Pencocokan Pola yang Diperluas

Berbagai operator pencocokan pola yang diperluas tercantum di bawah ini, dengan pattern-list adalah daftar yang berisi satu atau lebih nama file, dipisahkan menggunakan karakter |:

  1. *(pattern-list) – cocok dengan nol atau lebih kemunculan pola yang ditentukan
  2. ?(pattern-list) – cocok dengan nol atau satu kemunculan pola yang ditentukan
  3. +(pattern-list) – cocok dengan satu atau lebih kemunculan pola yang ditentukan
  4. @(pattern-list) – cocok dengan salah satu pola yang ditentukan
  5. !(pattern-list) – cocok dengan apa pun kecuali salah satu pola yang diberikan

Untuk menggunakannya, aktifkan opsi shell extglob sebagai berikut:

shopt -s extglob

1. Untuk menghapus semua file dalam direktori kecuali nama file, ketikkan 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 file .zip secara interaktif:

rm -i !(*.zip)

4. Selanjutnya, Anda dapat menghapus semua file dalam direktori selain semua file .zip dan .odt seperti berikut, sambil menampilkan apa yang sedang Selesai:

rm -v !(*.zip|*.odt)

Setelah Anda memiliki semua perintah yang diperlukan, matikan opsi shell extglob seperti ini:

shopt -u extglob

Hapus File Menggunakan Linux temukan Perintah

Dalam metode ini, kita dapat menggunakan perintah find secara eksklusif dengan opsi yang sesuai atau bersamaan dengan perintah xargs dengan menggunakan pipeline seperti pada formulir 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 file .gz di direktori saat ini:

find . -type f -not -name '*.gz'-delete

6. Dengan menggunakan pipeline dan xargs, Anda dapat mengubah 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 File .jpg 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, variabel GLOBIGNORE menyimpan daftar pola (nama file) yang dipisahkan titik dua untuk diabaikan oleh perluasan nama jalur.

Disarankan Baca: 12 Contoh Praktis Perintah Grep yang Berguna di Linux

Untuk menerapkan metode ini, pindahlah ke direktori yang ingin Anda bersihkan, lalu atur variabel GLOBIGNORE sebagai berikut:

cd test
GLOBIGNORE=*.odt:*.iso:*.txt

Dalam hal ini, semua file selain file .odt, .iso, dan .txt akan dihapus dari direktori saat ini.

Sekarang jalankan perintah untuk membersihkan direktori:

rm -v *

Setelah itu, matikan variabel GLOBIGNORE:

unset GLOBIGNORE

Catatan: Untuk memahami arti bendera yang digunakan dalam perintah di atas, lihat halaman manual setiap perintah yang telah kami 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 umpan balik kami di bawah.