GNU/Linux >> Belajar Linux >  >> Linux

3 Cara Menghapus Semua File di Direktori Kecuali Satu atau Beberapa File dengan Ekstensi

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 :

  1. * – cocok dengan nol atau lebih karakter
  2. ? – cocok dengan karakter tunggal apa pun
  3. [seq] – cocok dengan karakter apa pun di seq
  4. [!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:

  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. +(daftar pola) – 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 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.


Linux
  1. Bagaimana Memindahkan Semua File (termasuk Tersembunyi) Dari Satu Direktori Ke Yang Lain?

  2. Hapus Semua File/direktori Kecuali Satu File?

  3. File Cat Dengan Direktori?

  1. Sed:Hapus Semua Kemunculan String Kecuali Yang Pertama?

  2. Hapus Semua File Dalam Satu Folder Kecuali Yang Terakhir (Terbaru) 20?

  3. Bagaimana Cara Menghapus Semua File Kecuali Satu File Bernama Dari Folder Tertentu?

  1. Pindahkan semua file kecuali satu

  2. Unzip Semua File Di Direktori

  3. Hapus semua file kecuali 3 terbaru dalam skrip bash