¿Hay un máximo para bash expansión de nombre de archivo (globbing) y si es así, ¿qué es? Ver globbing en tldp.org.
Digamos que quiero ejecutar un comando contra un subconjunto de archivos:
grep -e bar foo*
rm -f bar*
¿Existe un límite para la cantidad de archivos a los que bash se expandirá y, de ser así, cuál es?
No estoy buscando formas alternativas de realizar esas operaciones (por ejemplo, mediante el uso find
).
bash
wildcards
bash-expansion
Thomas
fuente
fuente
Respuestas:
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):Arriba, dado que
printf
está integrado (en labash
mayoría de los shells tipo Bourne), no llegamos alexecve()
límite. Yxargs
dividirá la lista de argumentos en tantasrm
invocaciones como sea necesario para evitar laexecve()
limitación.Con
zsh
:Con
ksh93
:fuente
Puede ver el límite para el tamaño total de los argumentos con:
Generalmente, esto no está determinado por el shell, sino por el sistema operativo subyacente de acuerdo con esta respuesta .
fuente