Nenhum tal arquivo ou diretório Com find -exec rm -f {} \;

0

Eu tenho um trabalho de limpeza que é executado diariamente para limpar logs com mais de 30 dias.

find /dir/app/logs -mtime +30 -exec rm -f {} \;

Estou transferindo nossos empregos do cron para um produto de agendamento de terceiros, o Automic. Desde que movi este trabalho, continuo recebendo o erro "Nenhum tal arquivo ou diretório" aleatoriamente. Executar o comando find no prompt depois de receber o erro, sem o -exec rm -f {} \; sempre retorna nenhum resultado e é executado com êxito. Resumindo, não consigo reproduzir o erro.

O trabalho é executado executando o comando:

ssh user@server "find /dir/app/logs -mtime +30 -exec rm -f {} \;"

contra o servidor remoto.

Eu testei várias soluções sem qualquer sorte. Originalmente, o comando foi executado sem -f. Adicionando -f, eu entendo, é suposto para suprimir erros, mas eu não estou vendo isso acontecer. Eu tentei substituir -exec rm {} \; com -delete, mas isso também não ajudou.

Atualmente estou testando a mudança \; para + como sugerido aqui:

encontrar - exec rm vs -delete

Agradecemos antecipadamente por qualquer ideia do que está acontecendo.

    
por lightwing 05.01.2018 / 19:17

1 resposta

0

Após algum tempo livre e mais pesquisas, essa solução pode corrigir o problema:

find /usr/dir/logs/ -mindepth 1 -mtime +45 -delete

Parece que find e rm estavam incluindo o diretório pai e tentando removê-lo primeiro, o que explica por que ele às vezes funcionava, e então lançava erros de arquivo / diretório ausentes. O uso de -delete funcionou bem, e a adição de -mindepth 1 fez com que ele ignorasse o pai.

Para reter os subdiretórios onde eles não devem ser excluídos, adicione -type f para examinar apenas os arquivos que foram deixados. Além disso, havia uma instância em que um arquivo específico precisava ser ignorado. Isso parece funcionar para essa situação:

find /usr/dir/logs/ -mindepth 1 -type f \( ! -name "ignoreme*" \) -mtime +30 -delete
    
por 16.01.2018 / 14:57

Tags