Kemungkinan Duplikat:
Bagaimana menghapus semua file dalam direktori kecuali beberapa?
Bagaimana cara menghapus semua kecuali satu (atau beberapa) file di Unix?
Sesuatu seperti
rm -rf -ignore myfile.txt *
Kemungkinan Duplikat:
Bagaimana menghapus semua file dalam direktori kecuali beberapa?
Bagaimana cara menghapus semua kecuali satu (atau beberapa) file di Unix?
Sesuatu seperti
rm -rf -ignore myfile.txt *
Jawaban:
ls * | grep -v dont_delete_this_file | xargs rm -rf
Contoh:
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
Untuk menghapus semua file kecuali 'test2':
ls * | grep -v test2 | xargs rm -rf
Maka output 'ls' adalah:
test2
EDIT:
Terima kasih atas komentarnya. Jika direktori berisi beberapa file dengan spasi:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Anda dapat menggunakan (dengan bash):
rm !("test 1"|"test 4")
Output 'ls':
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Halaman ini memberikan berbagai pilihan tergantung pada shell: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
Untuk rekursif rmAnda harus melakukan rekursi dengan finddan mengecualikan file yang ingin Anda simpan (atau grep, tetapi itu dapat membawa Anda ke masalah spasi putih). Untuk bola shell, shell modern memiliki pola bola yang dapat digunakan untuk mengecualikan file; ini dapat dikombinasikan dengan rekursi glob tingkat shell jika tersedia (mis. zshmemiliki rm **/*~foo/bar- perhatikan bahwa ini kemungkinan akan mengalami batas panjang argumen untuk pohon direktori besar).