Zsh

在zsh中使用帶有萬用字元的rm時如何忽略空目錄?

  • January 11, 2017

當我嘗試從 中的兩個或多個子目錄中刪除所有文件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前進dir2dir2/blah而是會被刪除。

這個zsh功能是什麼,有沒有辦法讓rm行為像 in bash

與 不同的是,如果文件名生成模式沒有匹配項bashzsh預設情況下會報告錯誤。此行為可以全域更改,也可以基於每個模式更改。

為了防止來自全域不匹配模式的錯誤消息,您可以設置選項NULL_GLOBCSH_NULL_GLOB

setopt nullglob


如果模式沒有匹配項,它將從參數列表中刪除。不會列印錯誤消息。在你的例子中

rm dir1/* dir2/*


將只是擴展到

rm dir2/blah

* ```
setopt cshnullglob

還刪除不匹配的模式並且不列印錯誤消息,除非沒有任何模式匹配。

為了防止單個模式的錯誤消息,您可以使用 glob 限定符N,它的行為就像NULL_GLOB為此模式啟動了選項一樣:

rm dir1/*(N) dir2/*(N)

這也將擴展到

rm dir2/blah

引用自:https://unix.stackexchange.com/questions/336474