Zsh在zsh中使用帶有萬用字元的
在zsh中使用帶有萬用字元的rm
時如何忽略空目錄?
當我嘗試從 中的兩個或多個子目錄中刪除所有文件
zsh
,並且目錄已經為空時,將忽略以下目錄,並保留文件。例子:
$ mkdir dir1 $ mkdir dir2 $ touch dir2/blah # avoid the zsh safety prompt; this may not be necessary for this # example, just for ease of use here $ setopt rm_star_silent $ rm -r dir1/* dir2/* zsh: no matches found: dir1/* $ ls dir2 blah
在 bash 中,已經為空的目錄不會停止
rm
前進dir2
,dir2/blah
而是會被刪除。這個
zsh
功能是什麼,有沒有辦法讓rm
行為像 inbash
?
與 不同的是,如果文件名生成模式沒有匹配項
bash
,zsh
預設情況下會報告錯誤。此行為可以全域更改,也可以基於每個模式更改。為了防止來自全域不匹配模式的錯誤消息,您可以設置選項
NULL_GLOB
或CSH_NULL_GLOB
:
setopt nullglob
如果模式沒有匹配項,它將從參數列表中刪除。不會列印錯誤消息。在你的例子中
rm dir1/* dir2/*
將只是擴展到
rm dir2/blah
* ``` setopt cshnullglob
還刪除不匹配的模式並且不列印錯誤消息,除非沒有任何模式匹配。
為了防止單個模式的錯誤消息,您可以使用 glob 限定符
N
,它的行為就像NULL_GLOB
為此模式啟動了選項一樣:rm dir1/*(N) dir2/*(N)
這也將擴展到
rm dir2/blah