(13 jawaban)
Tutup 5 tahun yang lalu.
Inilah situasinya.
Saya memiliki direktori yang berisi banyak file dengan ekstensi berbeda. Saya ingin menghapus semua file kecuali satu dengan nama tertentu.
Ini dapat dilakukan dengan mudah menggunakan GUI dengan memilih semua dan menekan ctrl dan membatalkan pilihan file yang dimaksud.
Itulah yang saya inginkan, tetapi bagaimana saya bisa melakukannya dari baris perintah?
Misalnya: dirA berisi file-file berikut:
a.txt
b.txt
c.php
d.html
a.db
b.db
e.html
Saya ingin menghapus semua file yang hanya menyimpan file bernama a.txt
.
Jawaban Terbaik
Saya datang dengan perintah hebat sederhana yang mudah ini:
rm !(a.txt)
Anda dapat gunakan ! sebagai negasi
Uji glob dengan echo terlebih dahulu yaitu
echo !(a.txt)
Jika tidak berhasil, untuk bash
Anda mungkin perlu mengaktifkannya dengan
shopt -s extglob
Jika Anda ingin menyimpan keduanya a.txt
dan b.txt
, Anda dapat menggunakan !(a.txt|b.txt)
atau !([ab].txt)
.
Sunting:
untuk membuat rm
bekerja secara rekursif cukup tambahkan -r
seperti
rm -r !(a.txt)
dan juga, ini berfungsi dengan folder. hanya perlu mengubah nama menjadi nama dir, seperti untuk a_dir
rm -r !(a_dir)