作为部署脚本的一部分,我想从临时目录中转储一些缓存的内容。我使用如下命令:
rm /tmp/our_cache/*
但是,如果/tmp/our_cache
为空(在快速连续地将许多更改推送到我们的测试服务器时相当常见),则会打印以下错误消息:
rm: cannot remove `/tmp/our_cache/*': No such file or directory
这不是什么大问题,但有点难看,我想降低该脚本输出中的噪声与信号之比。
在unix中,删除目录内容而不收到抱怨该目录已空的消息的简洁方法是什么?
答案1
既然您可能想在没有提示的情况下删除所有文件,为什么不直接使用开关-f
来rm
忽略不存在的文件呢?
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
如果存在“真正的”问题或文件受到保护(然后您需要修饰符-f
来rm
删除此类文件),这样做仍然会产生错误,但在没有文件时会避免错误。
如果您使用 BASH 之外的其他 shell 来编写脚本,例如 zsh、ksh,您可以尝试其他可能更便携的语法:
if [[ "$(ls /tmp/our_cache/)" != "" ]]; then rm /tmp/our_cache/*; fi