Existe um limite máximo para a expansão do nome do arquivo (globbing) e, em caso afirmativo, qual é?

Existe um limite máximo para a expansão do nome do arquivo (globbing) e, em caso afirmativo, qual é?

Existe um limite máximo para a expansão do nome do arquivo (globbing) e, em caso afirmativo, qual é? Verglobulandoem tldp.org.

Digamos que eu queira executar um comando em um subconjunto de arquivos:

grep -e bar foo*
rm -f bar*

Existe um limite para quantos arquivos o bash será expandido e, em caso afirmativo, qual é?

Não estou procurando formas alternativas de realizar essas operações (por exemplo, usando find).

Responder1

Não há limite (além da memória disponível) para o número de arquivos que podem ser expandidos por um bashglob.

No entanto, quando esses arquivos são passados ​​como argumentos para um comando que éexecutado(em oposição a um shell interno ou função), então você pode atingir um limite de execve()chamadas do sistema em alguns sistemas. Na maioria dos sistemas, essa chamada de sistema tem um limite no tamanho cumulativo dos argumentos e do ambiente passados ​​para ela, e no Linux também um limite separado no tamanho de um único argumento.

Para mais detalhes, consulte:

Para contornar esse limite, você pode usar (assumindo GNU xargsou compatível):

printf '%s\0' foo* | xargs -r0 rm -f

Acima, como printfestá integrado (na bashmaioria dos shells do tipo Bourne), não atingimos o execve()limite. E xargsdividirá a lista de argumentos em quantas rminvocações forem necessárias para evitar a execve()limitação.

Com zsh:

autoload zargs
zargs foo* -- rm -f

Com ksh93:

command -x rm -f foo*

Responder2

Você pode ver o limite para o tamanho total dos argumentos com:

getconf ARG_MAX

Isso geralmente é determinado não pelo shell, mas pelo sistema operacional subjacente de acordo comesta resposta.

informação relacionada