Não há limite (além da memória disponível) para o número de arquivos que podem ser expandidos por bash
glob.
No entanto, quando esses arquivos são passados como argumentos para um comando que é executado (ao contrário de um shell interno ou função), você pode executar um limite da chamada do sistema execve()
alguns sistemas. Na maioria dos sistemas, essa chamada de sistema tem um limite no tamanho cumulativo dos argumentos e do ambiente transmitido a ela e também um limite separado no tamanho de um único argumento.
Para mais detalhes, consulte:
- O que define o tamanho máximo para um argumento único de comando?
- CP: argumentos de número de arquivos de origem máximos para cópia utilitário
Para contornar esse limite, você pode usar (assumindo o GNU xargs
ou compatível):
printf '%sautoload zargs
zargs foo* -- rm -f
' foo* | xargs -r0 rm -f
Acima, como printf
está integrado (em bash
e a maioria das camadas semelhantes a Bourne), não atingimos o limite execve()
. E o xargs
dividirá a lista de argumentos em quantas invocações rm
, conforme necessário, para evitar a limitação execve()
.
com zsh
:
command -x rm -f foo*
com ksh93
:
printf '%sautoload zargs
zargs foo* -- rm -f
' foo* | xargs -r0 rm -f