Como fazer com que meu sistema exclua todos os arquivos em um determinado diretório com mais de um período de tempo, mantendo intacta a estrutura de diretórios?

12

Eu tenho um diretório na minha máquina, pense nele como meu próprio tipo de tmpdiretório, mas está no meu ~diretório. E eu quero fazer com que meu sistema a cada 3 horas exclua todos os arquivos (embora mantenha intacta qualquer estrutura de diretórios, mas ainda exclua todos os arquivos em todos os níveis dos diretórios recursivamente) naquele 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 faço o login, portanto, não preciso executar algo em todas as inicializações.


fonte

Respostas:

21

Usando find:

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

  • -type f procurará apenas arquivos

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

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

Aqui está o problema -mtime +0, a maioria pode pensar em usar, -mtime +1mas findignorará qualquer tempo fracionário ao calcular os dias. Portanto, -mtime +1corresponderá a um arquivo se a última modificação tiver sido feita há pelo menos 2 dias atrás.

Citação man find, -mtimepossui a mesma convenção de tempo que -atime:

-atime n

Último acesso ao arquivo n * 24 horas atrás. Quando descobrir quantos períodos de 24 horas atrás o arquivo foi acessado pela última vez, qualquer parte fracionária é ignorada; portanto, para corresponder ao tempo +1, um arquivo deve ter sido acessado há pelo menos dois dias.

Observe também que, se você deseja precisão, deve procurar a -mminopção de findindicar o tempo em minutos.

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

Execute crontab -ee adicione:

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

Usando zshpara remover os arquivos:

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

Adicionando a cron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'
heemail
fonte
6

Você deve poder excluir todos os arquivos anteriores a 1 dia /home/username/directorye todos os diretórios abaixo dele com:

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

E para agendar esse comando a cada três horas, defina-o como um trabalho 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), então 3:00, 6:00, etc.

Vá para o crone crontab manpagespara obter mais informações sobre eles.

Limecat
fonte
4
Esta resposta está realmente errada, consulte a outra resposta .
4
Como esta resposta está errada e, na verdade, não diz nada além da outra resposta, melhore-a para que ela esteja correta e melhor que a outra resposta ou exclua-a.
5
@ParanoidPanda Entendo que você deseja respostas de alta qualidade, mas comentar duas vezes a mesma coisa é desnecessário e pode ser visto como agressivo, especialmente para um novo usuário.
RPiAwesomeness
2
@RPiAwesomeness: Bem, comentei na segunda vez porque estava sem tempo para editar meu primeiro comentário, e também queria dizer que eles deveriam excluir sua resposta, o que talvez não fosse algo necessariamente entendido no meu primeiro comentário, embora eu não queria que eles se sentissem sob ataque e como se eu estivesse apenas dizendo que eles deram a resposta errada e agora devem excluí-la, então eu adicionei um pouco sobre melhorias. Mas posso ver como isso pode ser tomado da maneira errada, por isso peço que se lembre: um Panda só fica agressivo quando você tira o bambu dele. ;-)