Câu trả lời:
Bash đã mở rộng toàn cầu (thử nghiệm đầu tiên, sau đó loại bỏ tiếng vang):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Bạn có thể xem nếu plugin được kích hoạt.
Thế còn:
mv A /tmp/
rm * -rf
mv /tmp/A .
Điều này tránh một số "sự khan hiếm" của một lỗi đánh máy trong các lệnh khác.
Cái gì đó như
find . -type d -not -name A -exec rm -ir {} \;
nên làm.
biên tập
Nó thực sự nên
find . -type d -maxdepth 1 -not -name A -exec rm -ir {} \;
để ngăn chặn find
đệ quy dưới A.
tôi thường làm điều này bằng cách thực hiện một lệnh ls làm cho nó đúng trước. Tôi không ở máy unix, nhưng đại loại như:
ls -lda "[^ A]"
Một khi bạn đã làm đúng, chuyển nó thành một lệnh
ls -lda "[^ A]" | xargs rm -rf
Vui lòng chỉnh sửa ở trên nếu tôi có biểu hiện thường xuyên sai ...
Đây là một cách. Tuy nhiên, hãy cẩn thận với những thứ này, nó mạnh đến mức nó chỉ có thể được sử dụng cho mục đích tốt hay xấu ...
tìm * -type d | grep -v "^ A" | xargs rm -rf
Không sử dụng find vì một số người đã hiển thị với -exec và rm mà không chuyển -print0 để tìm và -0 đến xargs. Nó sẽ bị lẫn lộn trên tên tệp có dấu cách hoặc dòng mới:
$ mkdir 'foo foo'
$ mkdir foo$'\n'foo
$ find . -type d -exec rm -ir {} \;
rm: cannot remove directory `.'
rm: remove directory `./foo\nfoo'? y
find: `./foo\nfoo': No such file or directory
rm: remove directory `./foo foo'? y
find: `./foo foo': No such file or directory
Thay vào đó, hãy sử dụng find -print0 với xargs -0, '-exec lệnh {} +' hoặc -delete nếu tìm thấy của bạn hỗ trợ nó.
Ngoài ví dụ trước về:
find -maxdepth 1 -type d -not -name A -not -name "." -exec rm -ir {} \;
bạn cũng có thể làm:
find some/subdir -mindepth 1 -maxdepth 1 -type d -not -name A -exec rm -ir {} \;
để tránh phải cd some/subdir
đầu tiên.