Có thể trùng lặp:
Làm thế nào để xóa tất cả các tệp trong một thư mục ngoại trừ một số?
Làm cách nào để xóa tất cả trừ một (hoặc một số) tệp trong Unix?
Cái gì đó như
rm -rf -ignore myfile.txt *
Có thể trùng lặp:
Làm thế nào để xóa tất cả các tệp trong một thư mục ngoại trừ một số?
Làm cách nào để xóa tất cả trừ một (hoặc một số) tệp trong Unix?
Cái gì đó như
rm -rf -ignore myfile.txt *
Câu trả lời:
ls * | grep -v dont_delete_this_file | xargs rm -rf
Thí dụ :
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
Để xóa tất cả các tệp ngoại trừ 'test2':
ls * | grep -v test2 | xargs rm -rf
Sau đó, đầu ra 'ls' là:
test2
BIÊN TẬP:
Cảm ơn các bình luận. Nếu thư mục chứa một số tệp có khoảng trắng:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Bạn có thể sử dụng (với bash):
rm !("test 1"|"test 4")
đầu ra 'ls':
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Trang này cung cấp nhiều tùy chọn tùy thuộc vào trình bao: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
Đối với một đệ quy, rm
bạn cần thực hiện đệ quy find
và loại trừ (các) tệp bạn muốn giữ (hoặc grep
, nhưng điều đó có thể khiến bạn gặp rắc rối về khoảng trắng). Đối với shell toàn cầu, các shell hiện đại có các mẫu toàn cầu có thể được sử dụng để loại trừ các tệp; điều này có thể được kết hợp với đệ quy toàn cục cấp vỏ khi có sẵn (ví dụ: zsh
có rm **/*~foo/bar
- lưu ý rằng điều này có khả năng chạy trong giới hạn độ dài đối số cho các cây thư mục lớn).