Zsh
刪除除一種(或多種)文件類型以外的所有文件類型
我一直在嘗試找到一個命令來刪除文件夾中的所有文件,但不是一種文件類型。但我似乎沒有任何運氣。到目前為止我已經嘗試過:
set extended_glob rm !(*.dmg) # this returns zsh:number expected rm ./^*.dmg # this returns no matches found
我使用的 zsh 版本是
zsh 5.0.2 (x86_64-apple-darwin13.0.1)
.
該
extended_glob
選項為您提供 zsh 自己的擴展glob 語法。setopt extended_glob rm -- ^*.dmg rm -- ^*.(dmg|txt)
這將刪除沒有副檔名的文件(例如
README
)。如果要保留這些文件,可以使用~
運算符來限制匹配項:setopt extended_glob rm -- *.*~*.dmg
如果您還想刪除子目錄中的文件,您可以使用
**
遞歸萬用字元。傳遞.
glob 限定符以將匹配限制為正常文件,或使用^/
而不是.
匹配所有非目錄(包括符號連結)。(請注意,rm -r
這對您沒有幫助,因為它會刪除目錄及其所有內容,或者根本不會進入目錄。)rm -- **/^*.(dmg|txt)(.)
您可以設置
ksh_glob
獲取ksh glob的選項。請注意,在否定模式是單詞中最後一件事的常見情況下,zsh 可能會將括號解析為 glob 限定符(在 ksh 仿真模式下不會這樣做)。setopt ksh_glob rm -- !(*.dmg|*.txt) setopt no_bare_glob_qual rm -- !(*.dmg)