我有一个自定义脚本,用于在日志文件过期一天后对其进行 gzip 压缩。在我的脚本中,所有错误 (stderr) 都记录到一个文件中,在脚本结束时,我会使用这个文件来了解其执行是否顺利。
我的代码的这一部分看起来像
# redirection of stderr to file
exec 2> /tmp/errors.txt
# gzip old log files
find *.log -mtime +1|xargs gzip -f
# test if error log file is empty
if [ -s /tmp/errors.txt ]; then
.....
fi
我的问题是:如果至少有一个文件需要 gzip 压缩,那么这段代码就可以很好地工作,但如果没有,它会在我不想的情况下引发错误。
我尝试过不同的解决方案来解决这个问题,但都没有成功。
有谁知道如何解决这个问题?
答案1
尝试这个
#redirect stderr to null
exec 2> /dev/null
FILECOUNT = `find *.log -mtime +1|wc -l`
#redirection of stderr to file
exec 2> /tmp/errors.txt
# gzip old log files
if [ $FILECOUNT != '0' ]; then
find *.log -mtime +1|xargs gzip -f
fi
# test if error log file is empty
if [ -s /tmp/errors.txt ]; then
.....
fi`
答案2
如果您使用的是 GNU 版本的 xargs,则可以使用-r
:
--no-run-if-empty
-r If the standard input does not contain any nonblanks, do not run
the command. Normally, the command is run once even if there is
no input. This option is a GNU extension.
代码:
# redirection of stderr to file
exec 2> /tmp/errors.txt
# gzip old log files
find *.log -mtime +1|xargs -r gzip -f
# test if error log file is empty
if [ -s /tmp/errors.txt ]; then
.....
fi