如果目录已经为空,则删除目录中的文件而不会出错

如果目录已经为空,则删除目录中的文件而不会出错

作为部署脚本的一部分,我想从临时目录中转储一些缓存的内容。我使用如下命令:

rm /tmp/our_cache/*

但是,如果/tmp/our_cache为空(在快速连续地将许多更改推送到我们的测试服务器时相当常见),则会打印以下错误消息:

rm: cannot remove `/tmp/our_cache/*': No such file or directory

这不是什么大问题,但有点难看,我想降低该脚本输出中的噪声与信号之比。

在unix中,删除目录内容而不收到抱怨该目录已空的消息的简洁方法是什么?

答案1

既然您可能想在没有提示的情况下删除所有文件,为什么不直接使用开关-frm忽略不存在的文件呢?

rm -f /tmp/our_cache/*

从手册页:

-f, --force
          ignore nonexistent files, never prompt

另外,如果其中可能有任何子目录/tmp/our_cache/,并且您希望将这些子目录及其内容也删除,请不要忘记-r开关。

答案2

find /tmp/our_cache/ -mindepth 1 -delete

编辑1

删除了“-type f

编辑2

添加了非标准选项-mindepth 1,以防止搜索根目录被删除(取消限制后-type f)。

答案3

您可以将标准错误重定向到/dev/null这样它就不会打印此内容

$  rm /tmp/our_cache/* 2>/dev/null

答案4

如果您的脚本使用 BASH,您可以尝试:

if test "$(ls /tmp/our_cache/)" !=  ""; then rm /tmp/our_cache/*; fi

如果存在“真正的”问题或文件受到保护(然后您需要修饰符-frm删除此类文件),这样做仍然会产生错误,但在没有文件时会避免错误。

如果您使用 BASH 之外的其他 shell 来编写脚本,例如 zsh、ksh,您可以尝试其他可能更便携的语法:

if [[ "$(ls /tmp/our_cache/)" !=  "" ]]; then rm /tmp/our_cache/*; fi

相关内容