Tarefa Cron para excluir arquivos com mais de 3 dias

21

Eu preciso remover arquivos com mais de três dias com um cron job em três diretórios diferentes. (esses 3 diretórios são filhos de um diretório pai /a/b/c/1 & /a/b/c/2 & /a/b/c/3 ) Isso pode ser feito com uma linha no crontab?

    
por KingKongFrog 12.06.2014 / 19:12

2 respostas

26

Isso é bastante fácil (embora note que isso acontece por um tempo de modificação há mais de três dias, já que o tempo de criação está disponível apenas em determinados sistemas de arquivos com ferramentas especiais):

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

Remova o # antes do -delete , assim que tiver certeza de que está localizando os arquivos que deseja remover.

Para que seja executado pelo cron, eu provavelmente criaria um script executável (adicione um shebang - #!bin/sh na linha superior do arquivo e torne executável com chmod a+x ), depois coloque-o em um% co_de apropriado % do diretório como cron ou /etc/cron.daily . Desde que você não precise de um cronograma mais específico e que esses diretórios existam em sua distro.

Atualizar

Como indicado abaixo, a opção /etc/cron.weekly para -delete não é muito portátil. Uma abordagem compatível com POSIX seria:

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

Novamente, remova o find quando tiver certeza de que possui os arquivos corretos.

Update2

Para citar Stéphane Chazelas comenta abaixo:

Note that -exec rm {} + has race condition vulnerabilities which -delete (where available) doesn't have. So don't use it on directories that are writeable by others. Some finds also have a -execdir that mitigates against those vulnerabilities.

    
por 12.06.2014 / 19:23
9

Você estaria muito melhor usando tmpwatch

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.
    
por 02.12.2014 / 18:36