以下脚本非递归地删除常规空文件(不包括点文件),然后非递归地删除空目录(不包括点文件),并忽略.DS_Store
文件的存在(也就是说,如果目录只包含一个.DS_Store
文件,那么该目录仍然会被删除)。
rm -f -- *(.L0)
setopt extended_glob
has_files_other_than_DS_Store() [[ -n $REPLY/^(#i).ds_store(#qNDY1) ]]
remove_empty_macos_dirs() {
local dir ret=0
for dir do
rm -f -- $dir/.(#i)ds_store(N.) && rmdir -- $dir || ret=$?
done
return $ret
}
remove_empty_macos_dirs *(/^+has_files_other_than_DS_Store)
有人能演示如何使其递归工作吗?也就是说,第一步是递归删除所有空的常规文件。然后递归删除空目录。
我会自己尝试,但说实话,我只是害怕尝试这个rm
命令。
要以递归方式执行此操作,您需要首先进行深度操作,这样,如果例如
dirA
只包含,其本身为空,则您先dirB
删除,这样它就变为空,并且可以依次删除。dirB
dirA
zsh
globs 确实具有epth-first排序od
的限定符:d
o
您可以先用
rm
/替换/进行测试,但这不一定会产生相同的效果,因为不会删除任何文件,因此无法使目录为空。rmdir
print -r Would rm
print -r Would rmdir
print