Script que exclui arquivos após 5 dias

5

É possível criar um script que apague arquivos em uma pasta específica após cinco dias sem excluir a (s) pasta (s).

Estou usando o servidor Ubuntu 12 sem a interface gui .

    
por Ventura 28.11.2013 / 13:07

3 respostas

11

Para encontrar arquivos modificados pela última vez há mais de cinco dias:

find /path/to/directory -type f -mtime +4

Para excluí-los ao mesmo tempo (teste acima do primeiro ):

find /path/to/directory -type f -mtime +4 -delete

Para automatizá-lo para que você esteja executando isso diariamente, execute crontab -e (como o usuário que você deseja executar esta tarefa) e adicione:

@daily find /path/to/directory -type f -mtime +4 -delete

Uma experiência para mostrar qual valor de mtime você deseja usar. O manual é lixo. Eu assumi que +5 era o que queríamos, mas um comentário discordou. A documentação parece estar em conflito, então comecei criando três arquivos, cada um com 1 dia de intervalo:

$ mkdir test
$ touch test/now
$ touch -d "1 day ago" test/yesterday
$ touch -d "2 days ago" test/day-before-yesterday
$ ls -l test
total 0
-rw-r--r-- 1 oli oli 0 Nov 26 13:12 day-before-yesterday
-rw-r--r-- 1 oli oli 0 Nov 28 13:11 now
-rw-r--r-- 1 oli oli 0 Nov 27 13:12 yesterday

Se quisermos algo entre 24 e 48 horas, usamos 1 sem sinal.

$ find test -mtime 1
test/yesterday

Mas se queremos coisas 24 horas +, +1 não funciona:

$ find test -mtime +1
test/day-before-yesterday

+1 parece significar "mais do que 1 mostra" ... Então +0 é usado:

$ find test -mtime +0
test/day-before-yesterday
test/yesterday

Tudo muito chato se você está acostumado a ser correto como eu ... Mas vou me recuperar, tenho certeza. Obrigado pela cutucada de Adaephon.

    
por Oli 28.11.2013 / 13:25
1

Sim, você pode usar tarefas agendadas Suponha que você precise remover arquivos no diretório / tmp / test / depois de cinco dias e depois

crontab -e

adicione agora estas linhas ao último

@weekly rm -fr /tmp/test/

Agora a pasta será apagada semanalmente. Para mais informações, clique aqui

    
por Ruban Savvy 28.11.2013 / 13:17
1

O que você precisa é algo como

@weekly find /tmp/test -type f -exec rm '{}' +

Nota: apenas rm -rf remove pastas também. Você pode adicionar -mtime para a hora da modificação.

Precisa ser exatamente cinco dias? Obtenha seus dias ou horários favoritos em:

Minuto - Hora - Dia do mês - Mês - Dia da semana

0 3 0,5,10,15,20,25 * *

O que significa 3 AM cada cinco dias, a menos que o mês seja 31 dias.

    
por deeb 28.11.2013 / 13:36