查找:当不存在文件时如何不出现错误(stderr)

查找:当不存在文件时如何不出现错误(stderr)

我有一个自定义脚本,用于在日志文件过期一天后对其进行 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

相关内容