Exclui o conjunto de diretórios usando o comando find sem entrar na lista de argumentos por muito tempo

0

Eu estou em uma situação onde eu tenho o diretório / tmp tendo pelo menos 25.000 - 50.000 diretórios nele. Eu estou tentando usar o seguinte comando para excluir os diretórios que são mais antigos que 2 dias nesse diretório.

find /path/to/tmp/* -type d -ctime +2 -delete

Mas continuo encontrando o erro de que a lista de argumentos é muito longa. Como posso limitar especificamente o número de diretórios sendo excluídos? Eu tentei usar a opção maxdepth 1 também e isso não parece funcionar.

    
por chrisrhyno2003 13.04.2018 / 05:12

2 respostas

1

Você pode remover o * , pois ele retornará tudo e é isso que está causando esse erro.

O Linux não controla os tempos de criação de arquivos ou pastas, embora o MacOS faça isso.

O ctime +2 em seu comando fará com que ele localize e exclua diretórios que tiveram algo a respeito deles alterados há mais de dois dias, exceto pelos tempos de acesso. Isso inclui alterações nas permissões, propriedade ou nos nomes dos diretórios que foram alterados. Não fará nada para os diretórios com base na data / idade de criação deles.

    
por 13.04.2018 / 05:39
1

A menos que você precise excluir diretórios de pontos, o * é desnecessário lá. Com o * , o shell está expandindo o caractere curinga para todos os arquivos e diretórios nesse diretório e passando esses como argumentos para find , causando o problema de tamanho do argumento. Sem ele, find reciclará nesse diretório e corresponderá aos subdiretórios por si só.

    
por 13.04.2018 / 05:30

Tags