Removendo vários arquivos de uma lista gigante (Argument list too long)
Não é todo sistema ou servidor que dá para automatizar a questão de apagar os logs, ou então, nem sempre é interessante apagá-los automaticamente. Por experiência própria, vez por outra preciso apagar vários arquivos gigantescos (geralmente logs) de uma única vez e a seguinte mensagem é gerada:
/bin/rm Argument list too long (Lista de argumento muito longa)
Bom, caso este seja o seu caso, basta entrar no diretório onde encontram-se os arquivos e executar algumas das alternativas de comando.
Para apagar todos os arquivos que contenham "2008" em seu nome:
$ for a in *2008*; do rm $a; done
Para apagar todos os arquivos que possuam a extensão .log:
[2] Comentário enviado por frikasoide em 12/03/2008 - 10:36h
Ola xisberto, acredito que você ainda não teve problemas no qual se refere essa Dica, no caso, erro de Argument list too long. Pesquise no Google sobre isso e você encontrará diversas pessoas com essa dificuldade. De qualquer forma, obrigado pela participação.
[3] Comentário enviado por removido em 12/03/2008 - 10:58h
Sim, frikasoide, já tive esse tipo de problema. Mas só agora, lembrando de como eu enfrentei o problema, eu entendi o espírito da sua dica.
Do jeito que usei, eu apenas tentava diminuir o número de argumentos por uma lista menor, mas tinha que passar várias listas em vários comandos rm.
Na sua dica, o comando rm é chamado várias vezes, cada uma com apenas um argumento. Se você tivesse dito isto lá na dica, eu só teria pensado "puxa vida, como fui burro", hehehehe
[5] Comentário enviado por SMarcell em 12/03/2008 - 13:21h
Outra alternativa seria utilizando o find em pipe com xargs. Ex.:
find <diretorio> -type f -name "*.log" | xargs -O rm
Desse modo o find passaria a lista de todos os arquivos de log para o xargs que por sua vez, passaria o máximo de argumentos (arquivos) possíveis para o rm sem causar estouro de pilha.
[12] Comentário enviado por frikasoide em 13/02/2014 - 10:35h
Bacana marmota38.
Você chegou a testar esse comando com mais de 1000 arquivos existentes?
O erro "Argument list too long" acontece em "sistemas UNIX, onda há um limite fixo de memória reservado para o ambiente e lista de parâmetros de um comando". Por isso este erro acontece geralmente com o "rm -rf *" em um diretório com muitos arquivos, o que gerará uma lista de parâmetros grande o suficiente para estourar a reserva de memória.
[15] Comentário enviado por alelima77 em 11/04/2020 - 16:27h
Me ajudou bastante, pois estava com uma quantidade imensa de arquivos no meu /tmp, consumindo muito inode no raiz, e na remoção normal de diretórios dentro do tmp estava retornando:
bash: /bin/rm: Argument list too long