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?


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.