Excluir arquivos com mais de 500 dias

10

Eu tenho diretório com arquivos a partir do ano de 2010. Quero excluir todos os arquivos com mais de 500 dias e tentei o seguinte:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

Mas eu entendo isso:

-bash: /usr/bin/find: Argument list too long

Como eu sei, isso significa que há muitos arquivos e findnão podemos lidar com eles. Mas mesmo se eu colocar o +2000que é mais de 3 anos, eu ainda estou recebendo isso.

O que estou perdendo aqui?

Garg
fonte
1
unix.stackexchange.com/a/239268/116858 (veja também o comentário)
Kusalananda

Respostas:

18

Você está ausente finde não precisa de uma lista de arquivos como entrada. O problema é que a glob se /var/log/arc/*expande para muitos arquivos. No entanto, findele recursará em subdiretórios por padrão, portanto, não há necessidade de usar o glob:

find /var/log/arc/ -type f -mtime +500 -delete

-deleteé um predicado não padrão. Se sua findimplementação não suportar, você poderá usar:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

em vez de.

terdon
fonte
Obrigado de mas agora tenho esse: find: invalid predicate -delete'`
Garg
1
@ Garg primeiro, desculpe, eu apenas copiei seu comando e não tinha notado que sua sintaxe está errada. O -deletenão leva {}. Veja atualização. No entanto, sua mensagem de erro parece sugerir que sua versão do findnão é compatível -delete. Se você não estiver usando o GNU find(o que na maioria dos casos não o fará, a menos que esteja usando o Linux), você precisará usá-lo -exec -rm {} \;.
terdon
Obrigado. -exec rm {} \;Faça o truque.
Garg 29/07
1
@ Hobbs Não vejo por que não, -execé definido pelo POSIX .
terdon
@terdon meu erro.
Hobbs