3 cara untuk menghapus semua file dalam direktori kecuali satu atau sedikit file dengan ekstensi

3 cara untuk menghapus semua file dalam direktori kecuali satu atau sedikit file dengan ekstensi

Terkadang Anda masuk ke dalam situasi di mana Anda perlu menghapus semua file dalam direktori atau cukup membersihkan direktori dengan menghapus semua file kecuali file dari jenis yang diberikan (diakhiri dengan ekstensi tertentu).

Di artikel ini, kami akan menunjukkan cara menghapus file di direktori kecuali ekstensi file tertentu atau jenis menggunakan rm, menemukan Dan Globignore perintah.

Sebelum kita bergerak 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 kita.

Disarankan Baca: Gunakan perintah temukan untuk mencari beberapa nama file/ekstensi di linux

Di Linux, pola shell adalah string yang terdiri dari karakter khusus berikut, yang disebut sebagai kartu wildcars atau Metacharacters:

  1. * - cocok dengan nol atau lebih karakter
  2. ? - cocok dengan karakter tunggal
  3. [SEQ] - cocok dengan karakter apa pun di SEQ
  4. [!SEQ] - cocok dengan karakter apa pun yang tidak ada di seq

Ada tiga metode yang mungkin yang akan kami jelajahi di sini, dan ini termasuk:

Hapus file menggunakan operator pencocokan pola yang diperluas

Operator pencocokan pola yang berbeda tercantum di bawah ini, di mana daftar pola adalah daftar yang berisi satu atau lebih nama file, terpisah menggunakan | karakter:

  1. *(daftar pola) - cocok dengan nol atau lebih kejadian dari pola yang ditentukan
  2. ?(daftar pola) - cocok dengan nol atau satu kemunculan pola yang ditentukan
  3. +(daftar pola) - cocok dengan satu atau lebih kejadian dari pola yang ditentukan
  4. @(daftar pola) - cocok dengan salah satu pola yang ditentukan
  5. !(daftar pola) - cocok dengan apapun kecuali salah satu pola yang diberikan

Untuk menggunakannya, aktifkan Extglob Opsi shell sebagai berikut:

# shopt -s extglob 

1. Untuk menghapus semua file di direktori kecuali nama file, ketik perintah di bawah ini:

$ rm -v !("nama file") 
Hapus semua file kecuali satu file di linux

2. Untuk menghapus semua file dengan pengecualian nama file1 Dan FileName2:

$ rm -v !("FileName1" | "FileName2") 
Hapus semua file kecuali beberapa file di linux

3. Contoh di bawah ini menunjukkan cara menghapus semua file selain dari semua .ritsleting file secara interaktif:

$ rm -i !(*.ritsleting) 
Hapus semua file kecuali file zip di linux

4. Selanjutnya, Anda dapat menghapus semua file dalam direktori selain dari semua .ritsleting Dan .odt file sebagai berikut, saat menampilkan apa yang sedang dilakukan:

$ rm -v !(*.Zip |*.ODT) 
Hapus semua file kecuali ekstensi file tertentu

Setelah Anda memiliki semua perintah yang diperlukan, matikan Extglob Opsi shell seperti begitu:

$ shopt -u extglob 

Hapus file menggunakan perintah find linux

Di bawah metode ini, kita dapat menggunakan perintah temukan secara eksklusif dengan opsi yang sesuai atau bersamaan dengan xargs Perintah dengan menggunakan pipa seperti pada formulir di bawah ini:

$ find / directory / -type f -not -name 'pola' -delete $ find / directory / -type f -not -name 'pola' -print0 | xargs -0 -i  rm  $ find / directory / -type f -not -name 'pola' -print0 | xargs -0 -i  rm [opsi]  

5. Perintah berikut akan menghapus semua file terpisah dari .GZ File di direktori saat ini:

$ find . -ketik f -not -name '*.GZ'-DELETE 
Perintah Temukan - Hapus Semua File Kecuali .file GZ

6. Menggunakan sebuah pipa Dan xargs, Anda dapat memodifikasi kasing di atas sebagai berikut:

$ find . -ketik f -not -name '*gz' -print0 | xargs -0 -i  rm -v  
Hapus file menggunakan perintah temukan dan xargs

7. Mari kita lihat satu contoh tambahan, perintah di bawah ini akan menghapus semua file tidak termasuk .GZ, .odt, Dan .jpg File di direktori saat ini:

$ find . -ketik f -not \ ( -name '*gz' -or -name '*odt' -or -name '*.jpg '\) -delete 
Hapus semua file kecuali ekstensi file

Hapus file menggunakan variabel bash globignore

Namun pendekatan terakhir ini, hanya bekerja dengan bash. Di sini, Globignore Variabel menyimpan daftar pola yang dipisahkan usus (nama file) yang akan diabaikan dengan ekspansi pathname.

Disarankan Baca: Berguna 12 Contoh Praktis tentang Perintah GREP di Linux

Untuk menggunakan metode ini, pindah ke direktori yang ingin Anda bersihkan, lalu atur 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:

$ Globignore yang tidak diatur 
Hapus file menggunakan variabel bash globignore

Catatan: Untuk memahami arti bendera yang digunakan dalam perintah di atas, lihat halaman manusia dari setiap perintah yang telah kita gunakan dalam berbagai ilustrasi.

Itu saja! Jika Anda memiliki teknik baris perintah lainnya dalam pikiran untuk tujuan yang sama, jangan lupa untuk berbagi dengan kami melalui bagian umpan balik kami di bawah ini.