Có rất nhiều tình huống trong đó việc sử dụng a *
hầu như không thể tránh khỏi - ví dụ rm -rf *
trong một thư mục chứa hàng ngàn thư mục con và tệp.
Nhưng nếu bạn muốn loại trừ chỉ một hoặc hai tệp hoặc thư mục khỏi rm
lệnh thì sao? Tôi đã tìm cách và chỉ tìm thấy các giải pháp khá phức tạp find . -depth -not \( -name 'one' -o -name 'two' \
-o -name 'three' \) -exec rm {} \;
như đã nêu ở đây .
Có khả năng để làm điều này một cách dễ dàng hơn - mà không có đường vòng đến find
không? Ví dụ rm -rf --exclude='one' --exclude='two' --exclude='three' *
như trong rsync hay chỉ rm -rf -e 'one','two','three' *
?
Thậm chí có thể một khả năng tổng quát để loại trừ mọi thứ từ *
(lệnh để khác thích cp
, mv
... không cần phải thực hiện riêng của họ)? Một cái gì đó như thế *{'one','two','three'}
hay như vậy?
mv -t /tmp one two three && rm -rf * && mv -t . /tmp/one /tmp/two /tmp/three
, nhưng tôi thích một giải pháp cho khả năng loại trừ một cách rõ ràng thứ gì đó khỏi *
. Chắc chắn sẽ có những tình huống di chuyển hoặc sao chép các tệp đến một đích khác sẽ không phải là một lựa chọn.
find
với--delete
tùy chọn (không cần thực thirm
cho mỗi tệp. Đó là chi phí không cần thiết).