我正在设置一个自动化过程,在其中删除包含子目录的目录中的文件。我只想删除目录中的文件,并希望保持子目录完好无损。所以现在我只是用来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