No hay límite (aparte de la memoria disponible) para la cantidad de archivos que puede expandir un bash
globo.
Sin embargo, cuando esos archivos se pasan como argumentos a un comando que se ejecuta (en oposición a una función o función integrada de shell), entonces puede encontrarse con un límite de la execve()
llamada del sistema en algunos sistemas. En la mayoría de los sistemas, esa llamada del sistema tiene un límite en el tamaño acumulativo de los argumentos y el entorno que se le pasa, y en Linux también tiene un límite separado en el tamaño de los argumentos individuales.
Para más detalles, ver:
Para evitar ese límite, puede usar (suponiendo GNU xargs
o compatible):
printf '%s\0' foo* | xargs -r0 rm -f
Arriba, dado que printf
está integrado (en la bash
mayoría de los shells tipo Bourne), no llegamos al execve()
límite. Y xargs
dividirá la lista de argumentos en tantas rm
invocaciones como sea necesario para evitar la execve()
limitación.
Con zsh
:
autoload zargs
zargs foo* -- rm -f
Con ksh93
:
command -x rm -f foo*