Remove arquivos antigos em um diretório, mas não na raiz

0

No momento, estou configurando o crontab para excluir todos os arquivos e diretórios no caminho mostrado a cada hora.

Minha solução atual é de duas linhas, então eu esperava que alguém pudesse me mostrar como fazer isso em uma linha. No momento, o segundo comando também remove o diretório complete . Eu gostaria de manter o diretório complete e excluir apenas todos os diretórios dentro de complete .

O que estou fazendo de errado? Não deve haver nenhuma barra após complete ? /* ?

Para excluir arquivos com mais de 60 minutos no diretório:

0 */1 * * * find /root/Downloads/complete/ -type f -mmin +60 -delete

Para excluir diretórios com mais de 60 minutos no diretório:

0 */1 * * * find /root/Downloads/complete/ -type d -mmin +60 -exec rm -r "{}" \;
    
por r.net 28.08.2017 / 10:13

3 respostas

2

Você provavelmente quis dizer

0 */1 * * * find /root/Downloads/complete/* -type d -mmin +60 -exec rm -r "{}" \;

porque no seu exemplo, find irá corresponder ao nome do diretório (e tudo abaixo dele), mas com um caractere curinga, o shell expandirá isso para tudo (exceto os nomes dos pontos) no diretório.

    
por 28.08.2017 / 10:16
0

Use esta linha apenas em vez disso.

 0 */1 * * * find /root/Downloads/complete/ \( -type f -o -type d \) -mmin +60 -delete

Exclui apenas arquivos e diretórios em /root/Downloads/complete/ caminho com o período de modificação de uma hora atrás.

    
por 28.08.2017 / 10:17
0
find /root/Downloads/complete/ -type d -mmin +60 -exec rm -r "{}" \;

Isso remove um diretório e todo o seu conteúdo se o próprio diretório não tiver sido modificado por uma hora, mesmo que os arquivos nesse diretório ou em subdiretórios tenham sido modificados recentemente. Provavelmente não é isso que você quer.

O tempo de modificação em um diretório provavelmente não é tão útil. Sugiro que você exclua arquivos antigos e, em seguida, diretórios quando eles ficarem vazios. Para evitar a exclusão do diretório raiz, passe -mindepth 1 .

cd /root/Downloads/complete && find . -type f -mmin +60 -delete && find . -depth -mindepth 1 -type d -empty -delete

Observe que isso pode ser prejudicial, por exemplo, você pode remover um diretório que acabou de ser criado e que outro programa estava usando. Excluir as coisas com base em um tempo limite raramente é uma boa ideia. Se você precisar excluir coisas, você deve fazê-lo quando os arquivos forem processados de maneira satisfatória, e não depois de um atraso arbitrário.

    
por 29.08.2017 / 02:13