Lista de argumentos muito longa ao executar o comando ls -d “$ PWD” / *

3

Estou tentando executar

ls -d "$PWD"/* > formmlFileList43k.list

Mas recebo o seguinte erro:

bash: /bin/ls: Argument list too long

Eu li usando um pipe não tem essa limitação, como posso usar pipe que irá realizar o mesmo que:

ls -d "$PWD"/* > formmlFileList43k.list

Qualquer ajuda seria apreciada

    
por arabian_albert 16.03.2016 / 00:07

1 resposta

3

Você tem muitos itens no diretório. Isso faz com que o shell expanda * em um argumento de linha de comando que exceda ARG_MAX bytes:

$ grep ARG_MAX /usr/include/linux/limits.h
#define ARG_MAX       131072    /* # bytes of args + environ for exec() */

Sugiro que você use find como solução alternativa:

$ find "${PWD}" -mindepth 1 -maxdepth 1 > formmlFileList43k.list

EDIT: @hagello escreveu uma nota importante sobre nomes de arquivos que começam com um ponto. Esses arquivos devem ser excluídos da saída find . Portanto, a solução correta é:

$ find "${PWD}" -mindepth 1 -maxdepth 1 '!' -name '.*' > formmlFileList43k.list
    
por 16.03.2016 / 00:33