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.