Como criar uma tarefa cron que apague automaticamente arquivos com mais de 30 dias?

0

Estou usando o desktop do Ubuntu 14. Eu uso essa máquina para fazer backup de outras máquinas e como um servidor FTP para as câmeras de segurança.

Eu preciso criar um cron job que exclua automaticamente arquivos com mais de 30 dias. Eu fiz alguma pesquisa e acho que encontrei o comando certo, mas quero ter certeza de que não estou perdendo algo antes de executá-lo.

* 4 * * * find /home/USER/DIRECTORY1/DIRECTORY2/ -mindepth 1 -type f -mtime 29 -delete

Preciso colocar "sudo" antes do comando find?

Preciso colocar "+" antes do número de dias "29"?

    
por Ramez Dous 13.04.2018 / 00:23

2 respostas

3

Primeiro, insira o comando find ... em um script bash e chame esse script do seu crontab . Se você tiver um diretório inicial criptografado ( cat /home/.ecryptfs/$USER/.ecryptfs/Private.mnt ), precisará armazenar seu script fora da árvore de diretórios $HOME . Manter um comando em crontab torna a configuração, o registro e a depuração mais difíceis, e o analisador do comando crontab não é tão inteligente quanto bash .

Segundo, sempre, sempre, teste SEMPRE find com -print e coloque-a em prática antes de considerar -delete .

Em terceiro lugar, o find test " -mtime 29 " está informando find "Encontre o arquivo mtime e retorne True se for igual a 29 . Você deve usar -mtime +29 , que find vê como " more than 29 ", que é o que você quer. De man find :

   Numeric arguments can be specified as

   +n     for greater than n,

   -n     for less than n,

   n      for exactly n.

Quarto, certifique-se de ter acesso de gravação aos diretórios em /home/USER/DIRECTORY1/DIRECTORY2/ .

Quinto, você quer dizer /home/USER/DIRECTORY1/DIRECTORY2/ ou /home/$USER/DIRECTORY1/DIRECTORY2/ ? Se $USER for para o ID do usuário, você tem um problema: cron não define $USER no ambiente de tempo de execução. Ele define $HOME , então você pode usar $HOME/DIRECTORY1/DIRECTORY2 .

    
por waltinator 13.04.2018 / 00:43
2

Eu uso um para excluir backups com mais de 10 dias e parece com isso:

50 17 * * * find /path/to/files/filename* -type f -mtime +10 | xargs rm

Eu uso filename* porque eles são para backups, então eles ficariam assim:

filename04-04-2018.tar.gz
filename04-05-2018.tar.gz
filename04-06-2018.tar.gz
    
por troylatroy 13.04.2018 / 00:39