Bạn có thể sử dụng find
thay vì vỏ của bạn:
find . -mindepth 1 -maxdepth 1 ! -name "*.dmg" -delete
Từ man find
:
! expr True if expr is false. This character will also usually need
protection from interpretation by the shell.
-name pattern
Base of file name (the path with the leading directories removed)
matches shell pattern pattern.
-delete
Delete files; true if removal succeeded. If the removal failed,
an error message is issued. If -delete fails, find's exit status
will be nonzero (when it eventually exits). Use of -delete
automatically turns on the -depth option.
Nếu bạn không thể sử dụng find
vì bất kỳ lý do gì, đây là một cách để làm điều đó với zsh
(hoặc các vỏ khác). zsh
là zsh
, có lẽ là một cách đơn giản hơn để làm điều này nhưng kể từ khi tôi là một bash
chàng trai, đây là những gì tôi đã đưa ra:
for file in *; do if [[ ! "$file" == *.dmg ]]; then rm $file; fi; done
rm -r secrets/!(directory)
nó cứ hỏinumber expected
hoặc đôi khi nó mang lại cho tôievent not found: directory