Como fazer o meu sistema excluir todos os arquivos em um determinado diretório mais antigo que um certo tempo, mantendo a estrutura de diretórios intacta?

12

Eu tenho um diretório em minha máquina, penso nele como meu próprio tipo de diretório tmp , mas está no meu diretório ~ . E quero fazer com que meu sistema a cada 3 horas exclua todos os arquivos (mantendo qualquer estrutura de diretórios intacta, mas ainda excluindo todos os arquivos em todos os níveis dos diretórios recursivamente) aquele diretório com mais de um dia.

Estou executando o Ubuntu GNOME 15.10 com o GNOME 3.18, isso pode ser feito? E se sim, como? Eu gostaria que isso fosse totalmente automatizado sem a necessidade de interação dos usuários. Isso deve ser algo iniciado automaticamente quando eu fizer login, então não preciso executar algo em cada inicialização.

    
por Great Uncle Bulgaria 15.12.2015 / 13:58

2 respostas

21

Usando find :

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp é o diretório a ser pesquisado recursivamente, altere isso de acordo

  • -type f procurará apenas arquivos

  • -mtime +0 , que corresponderá a um arquivo se ele foi modificado pela última vez há um dia ou mais

  • -delete apenas removerá o (s) arquivo (s) correspondente (s)

Aqui, a captura é -mtime +0 , a maioria pode pensar em usar -mtime +1 , mas find ignorará qualquer tempo fracionário durante o cálculo de dias. Portanto, -mtime +1 corresponderá a um arquivo se a última modificação tiver sido feita há pelo menos dois dias.

Citar man find , -mtime tem a mesma convenção de tempo que -atime :

  

-atime n

     

O arquivo foi acessado pela última vez n * 24 horas atrás. Quando descobrir descobre como   muitos períodos de 24 horas atrás, o arquivo foi acessado pela última vez,             A parte fracionária é ignorada, então, para corresponder a -atime +1, um arquivo deve ter sido acessado há pelo menos dois dias.

Observe também que, se você deseja precisão, deve olhar a opção -mmin de find para indicar o tempo em minutos.

Para executá-lo periodicamente após 3 horas, você pode adicionar uma entrada cron .

Execute crontab -e e adicione:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

Usando zsh para remover os arquivos:

rm ~/tmp/**/*(.-m+0)

Adicionando a cron :

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'
    
por heemayl 15.12.2015 / 20:01
6

Você deve poder excluir todos os arquivos com mais de 1 dia em /home/username/directory e todos os diretórios abaixo dele:

find /home/username/directory -type f -mtime +1 -delete

E para agendar esse comando a cada três horas, defina-o como uma tarefa do cron:

crontab -e

Então dentro do crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

Que executa seu comando a cada três horas na hora (ou seja, minuto 0), portanto, 3:00, 6:00, etc.

Acesse os cron e crontab manpages para mais informações sobre eles.

    
por Limecat 15.12.2015 / 14:27