Como deletar todos os arquivos com mais de 3 dias quando a “Lista de argumentos é muito longa”?


89

Eu tenho um diretório de arquivo de log que contém 82.000 arquivos e diretórios (cerca de meio a meio).

Preciso excluir todos os arquivos e diretórios com mais de 3 dias.

Em um diretório com 37.000 arquivos, consegui fazer isso com:

find * -mtime +3 -exec rm {} \;

Mas com 82.000 arquivos / diretórios, recebo o erro:

/ usr / bin / find: Lista de argumentos muito longa

Como posso contornar esse erro para excluir todos os arquivos / diretórios com mais de 3 dias?


1
Você já tentou find -mtime +3 -exec rm {} +?
Gilles Quenot

1
Acredito que correr find * -mtime +3 |xargs rmresolveria esse problema.
Mats Petersson

9
Acho que o único problema é find *. find .é melhor. O shell globing expande o *para uma lista enorme de arquivos e diretórios.
ruído natural de

@artlessnoise está certo.
sjas

Respostas:


120

Para excluir todos os arquivos e diretórios do diretório atual :

find . -mtime +3 | xargs rm -Rf

Ou, alternativamente, mais em linha com o comando original do OP:

find . -mtime +3 -exec rm -Rf -- {} \;

26
-1 O problema é a estrela em "find *", você resolveu usando "find". em vez de. Xargs é enganoso aqui.
Aleksandr Levchuk

7
@AleksandrLevchuk resolve o problema de OPs e, portanto, não merece um downvote
hd1

11
Pergunta: "find * -mtime +3 -exec rm {} \;" dá a lista de argumentos muito longa. Resposta: Use "find. -Mtime +3 -exec rm {} \;"
Aleksandr Levchuk

2
Você pode adicionar --depois de rm, comofind . -mtime +3 -exec rm -- {} \;
domen

8
Ninguém disse para que --serve.
Acumenus

59

Também pode usar:

find . -mindepth 1 -mtime +3 -delete

Para não excluir o diretório de destino


4
Melhor resposta, muito mais limpa do que chamar rm (e provavelmente mais segura). Funciona para subdiretórios também.
básico 6

16

Outra solução para a questão original, esp. útil se você deseja remover apenas ALGUNS dos arquivos mais antigos em uma pasta, seria algo assim:

find . -name "*.sess" -mtime +100 

e assim por diante .. Cita curingas de shell de bloco, permitindo que você "encontre" milhões de arquivos :)

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.