Como suprimir determinada mensagem de erro no comando ‘find’?

Como suprimir determinada mensagem de erro no comando ‘find’?

find /var/log/myfile.*.txt -type f

Se não houver nenhum arquivo que corresponda a esse padrão, estou recebendo logs de erros como No such file or directory.

Pergunta: como posso evitar apenas esta mensagem de erro? É claro que eu poderia adicionar um 2>/dev/nullno final, mas isso suprimiria quaisquer erros. Como eu poderia simplesmente ignorar o mencionado?

Porque eu tenho um cronjob que exclui alguns arquivos periodicamente e sempre registra erros se nenhum arquivo estiver presente:

@daily find /var/log/myfile.*.txt -mtime +7 -delete

Responder1

O correto nesse caso é não acionar de forma alguma essa mensagem.

Quando você executa isso em um shell

find /var/log/myfile.*.txt -type f

/var/log/myfile.*.txté expandido pela casca; findobtém objetos expandidos ou literais /var/log/myfile.*.txtse não houver correspondência. O último caso desencadeia No such file or directory.

Você pode criar um arquivo fictício primeiro: touch '/var/log/myfile.dummy_name.txt'(compareelefante no Cairo). Esta "solução" não é muito elegante.

Uma solução melhor é lidar findcom o padrão:

find /var/log/ -type f -name "myfile.*.txt"

onde aspas duplas evitam globbing no shell (compareesse). Neste caso *é tratado pelo findpróprio porque -namesuporta tais padrões.

A abordagem acima, no entanto, pode corresponder myfile.*.txtemqualquer subdiretóriode /var/log/também. Se o seu findsuporte -maxdepth, use-o:

find /var/log/ -maxdepth 1 -type f -name "myfile.*.txt"

Se não, veja isto:Limitar a localização POSIX a uma profundidade específica?


Seu sistema operacional provavelmente já usa logrotate(8)para gerenciar arquivos de log.

No meu Debian logrotateé executado diariamente por causa de /etc/cron.daily/logrotate; deve ser semelhante no Ubuntu. Posso criar uma configuração personalizada /etc/logrotate.d/e gerenciar arquivos de log arbitrários dessa maneira. Considere esta abordagem.

informação relacionada