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 *
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"
Dengan asumsi Anda menggunakan bash shell (kasus paling umum), Anda dapat menggunakan simbol negasi globbing (ekspansi nama path):
Ini menggunakan globbing yang diperluas, jadi Anda harus mengaktifkannya terlebih dahulu:
sumber
sumber
sumber
Halaman ini memberikan berbagai pilihan tergantung pada shell: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
sumber
Untuk rekursif
rm
Anda harus melakukan rekursi denganfind
dan mengecualikan file yang ingin Anda simpan (ataugrep
, 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.zsh
memilikirm **/*~foo/bar
- perhatikan bahwa ini kemungkinan akan mengalami batas panjang argumen untuk pohon direktori besar).sumber