Answers:
您正在尝试做的是递归删除。为此,您需要一个递归工具,例如find。
find FOLDER -type f -delete
与bash:
shopt -s globstar ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done
在这里遍历全局扩展文件名,并仅删除文件。
以上是空运行,如果对要进行的更改感到满意,请删除echo以实际删除:
for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done
最后,未设置globstar:
shopt -u globstar
使用zsh,利用全局限定符:
echo -- FOLDER/**/*(.)
(.) 是glob限定词,它将glob扩展限制为仅常规文件。
上面只是打印文件名,实际删除是:
rm -- FOLDER/**/*(.)
如果您的版本find不支持-delete,则可以使用以下命令删除当前目录及以下目录中的每个文件。
find . ! -type d -exec rm '{}' \;
-exec rm {} +会更快,尤其是在有很多文件的情况下。
find . ! -type d -exec rm {} +删除符号链接。
find不支持,-delete则可能也不支持-exec ... {} +。推荐的解决方法是find ... -print0 | xargs -r0 rm(如果期望许多潜在的匹配)。
-exec ... {} +是POSIX,但-delete不是。(-print0顺便说一句也不是。)
find支持-print0但不支持的非POSIX 实现-exec ... {} +(-delete尽管我不记得了)。一个在OS X上,另一个在Solaris上(几年前在一个非常保守的更新系统上)。您也可以替代-print0使用-printf '%p\0'。无论如何,这是Ask Ubuntu,而不是Unix&Linux,而Ubuntu永远使用GNU find。