คุณสามารถใช้find
แทนเปลือกของคุณ:
find . -mindepth 1 -maxdepth 1 ! -name "*.dmg" -delete
จาก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.
หากคุณไม่สามารถใช้find
ด้วยเหตุผลใด ๆ นี่เป็นวิธีทำด้วยzsh
(หรือกระสุนอื่น ๆ ) zsh
เป็นzsh
อาจมีวิธีที่ง่ายของการทำเช่นนี้ แต่เนื่องจากผมเป็นbash
คนที่แต่งตัวประหลาดนี้เป็นสิ่งที่ฉันมาด้วย:
for file in *; do if [[ ! "$file" == *.dmg ]]; then rm $file; fi; done
rm -r secrets/!(directory)
มันก็จะถามหาnumber expected
หรือบางครั้งมันก็ทำให้ฉันevent not found: directory