Saya memiliki direktori yang berisi banyak file. Saya ingin menghapus semua file kecuali file.txt . Bagaimana cara melakukannya?
Ada terlalu banyak file untuk menghapus file yang tidak diinginkan satu per satu dan namanya terlalu beragam untuk digunakan * untuk menghapus semuanya kecuali file yang satu ini.
Seseorang menyarankan menggunakan
rm !(file.txt)
Tapi itu tidak berhasil. Ini mengembalikan:
Badly placed ()'s
OS saya adalah Scientific Linux 6.
Ada ide?
Jawaban yang Diterima:
POSIXly:
find . ! -name 'file.txt' -type f -exec rm -f {} +
akan menghapus semua file biasa (secara rekursif, termasuk yang tersembunyi) kecuali file.txt
. Untuk menghapus direktori, ubah -type f
untuk -type d
dan tambahkan -r
pilihan untuk rm
.
Di bash
, untuk menggunakan rm -- !(file.txt)
, Anda harus mengaktifkan extglob:
$ shopt -s extglob
$ rm -- !(file.txt)
(atau memanggil bash -O extglob
)
Perhatikan bahwa extglob
hanya berfungsi di bash
dan keluarga cangkang Korn. Dan menggunakan rm -- !(file.txt)
dapat menyebabkan Argument list too long
kesalahan.
Dalam zsh
, Anda dapat menggunakan ^
untuk meniadakan pola dengan extendedglob diaktifkan:
$ setopt extendedglob
$ rm -- ^file.txt
atau menggunakan sintaks yang sama dengan ksh
dan bash
dengan opsi ksh_glob
dan no_bare_glob_qual
diaktifkan.