Cron job para excluir arquivos com mais de 3 dias

Cron job para excluir arquivos com mais de 3 dias

Preciso remover arquivos com mais de 3 dias com um cron job em 3 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?

Responder1

Isso é bastante fácil (embora observe que isso ocorre há mais de 3 dias, já que o tempo de criação só está disponível 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 -deletequando tiver certeza de que ele está encontrando os arquivos que deseja remover.

Para executá-lo pelo cron, eu provavelmente apenas criaria um script executável (adicionaria um shebang - #!bin/shà linha superior do arquivo e tornaria executável com chmod a+x) e depois o colocaria em um crondiretório apropriado como /etc/cron.dailyou /etc/cron.weekly. Desde que, claro, você não precise de uma programação mais específica e que esses diretórios existam em sua distro.

Atualizar

Conforme observado abaixo, a -deleteopção findnã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 {} +

Remova novamente #quando tiver certeza de que possui os arquivos corretos.

Atualização2

Para citar deComentário de Stéphane Chazelasabaixo:

Observe que -exec rm {} +possui vulnerabilidades de condição de corrida que -delete(quando disponíveis) não possuem. Portanto, não o use em diretórios que possam ser gravados por outras pessoas. Algumas descobertas também possuem um -execdirrecurso que atenua essas vulnerabilidades.

Responder2

Você ficaria muito melhor usandotmpwatch

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.

informação relacionada