shell script para remover arquivos

1

Estou tentando excluir arquivos com mais de seis dias e, em seguida, registre os arquivos que foram excluídos.
Até agora.

Em um arquivo sh , tenho seguido:

find /home/pi/ftp/upload -type f -mtime +6 -exec rm {} +

Em sudo crontab

59 23 * * * /home/pi/scripts/cullftp.sh > /var/log/ftp/'date +\%Y-\%m-\%d-\%H\%M\%S'-cull.log 2>&1

Mas quando é executado à meia-noite, que cria apenas um arquivo vazio e nenhum dos arquivos é excluído.

Embora esse trecho do código funcione:

find /home/pi/ftp/upload -type f -mtime +6

Qual é a melhor maneira de resolver isso?

    
por BoomRamada 20.01.2018 / 10:52

1 resposta

7

1) Verifique se o arquivo de script é executável e se tem uma linha de hashbang adequada ( #!/bin/sh ou #!/bin/bash ou algo parecido), embora você deva receber um erro se não for executável.

2) find ... -exec rm não imprime nada, você precisa informar explicitamente find para imprimir os nomes de arquivo também, por exemplo, find ... -exec rm + -print ou find ... -delete -print se o seu find suportar -delete .

3) Pelo menos no GNU find, -mtime +6 tem algum arredondamento interessante. Primeiro, ele arredonda o tempo para dias inteiros (24 h períodos) e, em seguida, verifica se o tempo resultante é estritamente maior que 6. O resultado é que ele corresponde apenas a arquivos com pelo menos 7 * 24 horas. Usar algo como -mmin +8640 diminuiria o impacto. (6 dias * 24 h / dia * 60 min / h = 8640 min)

    
por 20.01.2018 / 11:01

Tags