Linux

查找:不存在文件時如何不出現錯誤(stderr)

  • September 23, 2013

我有一個自定義腳本,當它們一天前 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 的文件,則此程式碼效果很好,但如果沒有,它會在我不想這樣做時引發錯誤。

我嘗試了不同的解決方案來解決這個問題,但沒有成功。

有誰知道如何解決這個問題?

試試這個

#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`

如果您使用的是 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

引用自:https://serverfault.com/questions/540460