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/null
no 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; find
obtém objetos expandidos ou literais /var/log/myfile.*.txt
se 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 find
com o padrão:
find /var/log/ -type f -name "myfile.*.txt"
onde aspas duplas evitam globbing no shell (compareesse). Neste caso *
é tratado pelo find
próprio porque -name
suporta tais padrões.
A abordagem acima, no entanto, pode corresponder myfile.*.txt
emqualquer subdiretóriode /var/log/
também. Se o seu find
suporte -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.