find: como não ter erros (stderr) quando não existem arquivos

1

Eu tenho um script personalizado que gzip arquivos de log quando eles são um dia de idade. No meu script todos os erros (stderr) são registrados em um arquivo e no final do script eu uso este arquivo para saber se a execução foi boa ou não.

Esta parte do meu código parece

# 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

Meu problema é: esse código funciona muito bem se houver pelo menos um arquivo para gzip, mas se não, ele gera um erro quando não quero.

Eu tentei soluções diferentes para resolver este problema sem sucesso.

Alguém sabe como resolver esse problema?

    
por daks 20.09.2013 / 14:24

2 respostas

1

Tente isso

#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'
    
por 20.09.2013 / 15:09
1

Se você estiver usando uma versão GNU do xargs, você pode usar -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.

Código:

# 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
    
por 23.09.2013 / 23:40