Existe um máximo para bash expansão de nome de arquivo (globbing) e, se sim, qual é?

11

Existe um máximo para bash expansão de nome de arquivo (globbing) e, se sim, qual é? Veja globbing em 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 maneiras alternativas de executar essas operações (por exemplo, usando find).

Thomas
fonte
2
Consulte também: O que define o tamanho máximo para um argumento único de comando? Nos sistemas Linux atuais, existem limites diferentes para o tamanho de um único argumento e para o tamanho total. Este último depende do limite de tamanho da pilha.
precisa saber é o seguinte

Respostas:

17

Não há limite (exceto a memória disponível) para o número de arquivos que podem ser expandidos por um bashglobo.

No entanto, quando esses arquivos são passados ​​como argumentos para um comando que é executado (em oposição a uma função ou função interna do shell), você pode executar um limite de execve()chamada do sistema em alguns sistemas. Na maioria dos sistemas, essa chamada do sistema tem um limite no tamanho cumulativo dos argumentos e no ambiente transmitidos a 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 printfé embutido (na bashmaioria das conchas 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*
Stéphane Chazelas
fonte
7

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

getconf ARG_MAX

Geralmente, isso é determinado não pelo shell, mas pelo sistema operacional subjacente, de acordo com esta resposta .

DopeGhoti
fonte
2
Eu acho que é o comprimento total, não o número?
precisa saber é o seguinte
1
Você está, é claro, correto; Atualizei minha resposta para refletir isso. Por esse motivo, o limite para o número de argumentos será uma função do tamanho dos argumentos.
DopeGhoti 06/04