.
Cada comando, como
cp
,mv
,rm
,tar
,rsync
,grep
, e assim por diante, produz o erro “comando: lista de argumentos muito longa”. Por que isso acontece e como faço para corrigir isso?
Quando os usuários do Linux tentam executar um comando com muitos argumentos, eles podem receber um erro informando “lista de argumentos muito longa.”
Este erro acontece porque todo sistema tem um tamanho máximo da lista de argumentose quando um determinado comando possui muitos argumentos, o sistema lança uma mensagem de erro.
Para corrigir esse problema, os usuários podem empregar várias soluções, como dividir o comando em partes menores usando um loop, canalizar a saída do comando para um arquivo ou utilizar xargs para dividir o comando em partes gerenciáveis.
Mas antes de chegarmos à parte sobre as soluções, deixe-me primeiro mostrar como são os problemas e quando eles se tornam ativos em seu sistema.
Quando você veria o erro “lista de argumentos é muito longa”?
Como afirmei anteriormente, comandos como cp
, mv
e rm
lançará um erro se você tentar manipular um grande número de arquivos de uma só vez. Para mostrar o erro, permita-me usar o touch
comando para criar uma coleção de 5.00.000 arquivos de uma só vez.
Não é possível para você e para mim digitar cinco mil nomes de arquivos exclusivos no terminal. No entanto, ao utilizar expansão de cintapodemos chegar ao resultado mostrado abaixo:
$ touch filename{1..500000}.txt
Leia também: O comando touch faz muito mais do que apenas criar um arquivo vazio
E, como esperado, o comando imprime um erro na tela da seguinte forma:
De alguma forma, consegui criar um grande número de arquivos usando este guia, mas quando tentei listar, mover, copiar, remover ou até mesmo criar um arquivo, todos falharam conforme mostrado abaixo.

Como todos estão na mesma página sobre o problema agora, vamos tentar encontrar uma solução.
Corrija o erro “lista de argumentos muito longa” para todos os comandos
Para corrigir o “erro de lista de argumentos muito longa” para todos os comandos, devemos primeiro entender o que está causando isso.
Como você sabe, ocorre quando a lista de argumentos excede o número máximo de argumentos que o sistema pode manipular, mas como posso saber qual é esse máximo?
A resposta pode ser encontrada executando o getconf ARG_MAX
comando, que retornará o número máximo de argumentos que podem ser passados para um comando.
Isso nos permite saber o número exato de argumentos que nosso comando pode ter, que podem ser diferentes dependendo do sistema operacional, versão do kernel e shell que estão sendo usados.
Depois de saber qual é o tamanho máximo do argumento, podemos ajustar nossos comandos de acordo para evitar ultrapassar esse limite.
Seção de Comando
Uma das maneiras mais fáceis de corrigir o erro “lista de argumentos muito longa” é usar xargs
com o find
comando, que pegará a saída do comando find e a dividirá em blocos que estejam dentro do limite máximo de argumentos.
Além disso, você também pode usar instruções de loop em seus scripts para iterar a saída de find e dividi-la em partes menores que podem ser passadas para outros comandos.
Se você puder usar os caracteres curinga, poderá aproveitá-los para manipular arquivos do sistema com base em padrões, o que garantirá que a lista de argumentos não ultrapasse o limite máximo
Depois de muita discussão teórica, é hora de entrar no aspecto prático dessas soluções.
solução de comando de toque
Primeiro de tudo, vamos criar um grande número de arquivos usando o touch
comandoque falhou acima, e use a função de loop para iterar e criar arquivos exclusivos de 500 mil.
Para evitar que sua estrutura de diretório atual fique bagunçada, sugiro que você execute o seguinte comando no novo diretório.
$ mkdir test-arena && cd test-arena
$ for i in {1..500000}; do touch filename$i.txt; done
solução de comando cp
Então deixe-me usar o find
comando em conjunção com --exec ou então canalizar a saída para xargs
para copiar todo este arquivo para um novo diretório:
$ find /home/shen/test-arena -name "filename*" -exec cp {} -vt /home/shen/test-dir ;
or
$ find /home/shen/test-arena -name "filename*" | xargs cp -vt /home/shen/test-dir
Você pode fazer o mesmo com um “loop for”, mas é lento comparado ao anterior, mas você ainda pode tentar.
$ for i in /home/shen/test-arena/filename*; do cp "$i" -vt /home/shen/test-dir ; done
Você também pode usar caracteres curinga para copiar um arquivo de um diretório para outro dividindo o arquivo. Deixe-me dar um exemplo simples: copiar um arquivo do intervalo de 1 a 100 para outro diretório.
$ cp /home/shen/test-arena/filename{1..100}.txt -vt /home/shen/test-dir
solução de comando mv
Mas agora quero mover os arquivos para um local diferente. Nesses cenários, você pode simplesmente usar o seguinte comando para mover todos os arquivos grandes ao mesmo tempo:
$ find /home/shen/test-arena -name "filename*" -exec mv {} -vt /home/shen/test-dir ;
or
$ find /home/shen/test-arena -name "filename*" | xargs mv -vt /home/shen/test-dir
É possível mover todos os arquivos grandes usando um loop? Sim, você pode fazer isso executando o comando abaixo; apenas certifique-se de substituir o caminho do arquivo pelo caminho real.
$ for i in /home/shen/test-arena/filename*; do mv "$i" -vt /home/shen/test-dir ; done
Não quero mover todos os arquivos; Eu só quero mover um intervalo específico de arquivos. Em seguida, execute o comando abaixo:
$ mv /home/shen/test-arena/filename{1..100}.txt -vt /home/shen/test-dir
solução de comando rm
Depois de aprender tudo isso, vamos remover todos os arquivos do sistema suprimindo o erro “lista de argumentos muito longa”.
Para concluir a tarefa, deixe-me executar o seguinte comando:
$ find ~/test-dir -name "filename*" -exec rm {} -v ;
or
$ find /home/shen/test-arena -name "filename*" | xargs rm -v
Leia também: O que você precisa saber sobre o comando rm no Linux e sua sintaxe avançada
Até eu posso remover todos os arquivos grandes do meu sistema usando o mecanismo de loop:
$ for i in /home/shen/test-arena/filename*; do rm -v "$i" ; done
Mas se eu não quiser excluir todos os arquivos grandes, exceto um intervalo específico de arquivos, devo usar o seguinte comando:
$ rm -v /home/shen/test-arena/filename{1..100}.txt
Embrulhar
Estas são algumas maneiras de resolver o erro “Lista de argumentos muito longa”. Você pode experimentar diferentes métodos e escolher aquele que melhor se adapta às suas necessidades.
Se você conhece outras maneiras de realizar a mesma tarefa, sinta-se à vontade para comentar e compartilhá-las conosco para que possamos aprender uns com os outros.
De qualquer forma, se houver algo que eu precise considerar, use o espaço abaixo para fornecer qualquer informação adicional ou feedback.
Até lá, coloque os pés para cima e relaxe. Como sempre, o próximo artigo será publicado em breve.

Um homem com uma tecnologia efusiva que explorou algumas das incríveis coisas da tecnologia e está explorando mais. Enquanto avançava, tive a chance de trabalhar no desenvolvimento Android, Linux, AWS e DevOps com várias ferramentas de código aberto.
.