忽略“无法删除`dir`:是目录消息

忽略“无法删除`dir`:是目录消息

我正在设置一个自动化过程,在其中删除包含子目录的目录中的文件。我只想删除目录中的文件,并希望保持子目录完好无损。所以现在我只是用来rm *删除该目录中的文件。但是,此命令会抛出消息:cannt remove 'dir': Is a directory。我知道我很挑剔,但我不希望该消息重复出现在我的日志中。是否有更好的命令可以用来删除或可以rm忽略子目录的方法?

答案1

您可以丢弃错误消息:

rm * 2>/dev/null

这将消除所有错误。如果您想查看其他潜在错误,那么我们可以做一些更复杂的事情:

rm * 2>&1 | grep -v 'cannot remove .*: Is a directory'

这样其他错误仍然会被记录。

答案2

在 zsh 中:

rm *(^/)

其他 shell 没有与 zsh 等效的 shell全局限定符。相反,您可以调用find,它能够按类型区分文件,并告诉它不要递归到除.(起始目录)之外的子目录。

find . -name . -o -type d -prune -o rm -f {} +

这会删除点文件,但*不匹配点文件。如果您想保留点文件,请告诉find不要调用rm它们。

find . -name . -o -type d -prune -o ! -name '.*' rm -f {} +

(您可以使用-mindepth-maxdepth-delete,但前提是您不需要脚本在find没有这些选项的系统上运行。我使用的选项是可移植的。)

答案3

给你:

find ./ -type f -exec rm -f * {} \; 2> /dev/null

如果您想保持子目录中的文件完整:

rm -f * 2> /dev/null

相关内容