¿Existe un máximo para la expansión del nombre del archivo bash (globbing) y, de ser así, cuál es?

¿Existe un máximo para la expansión del nombre del archivo bash (globbing) y, de ser así, cuál es?

¿Existe un máximo para la expansión del nombre del archivo bash (globbing) y, de ser así, cuál es? Vergloboen tldp.org.

Digamos que quiero ejecutar un comando en un subconjunto de archivos:

grep -e bar foo*
rm -f bar*

¿Existe un límite en cuanto a la cantidad de archivos a los que se expandirá bash y, de ser así, cuál es?

No estoy buscando formas alternativas de realizar esas operaciones (por ejemplo, mediante el uso find).

Respuesta1

No hay límite (aparte de la memoria disponible) para la cantidad de archivos que un bashglobo puede expandir.

Sin embargo, cuando esos archivos se pasan como argumentos a un comando que esejecutado(a diferencia de una función o función incorporada del shell), es posible que se encuentre con un límite de execve()llamada al sistema en algunos sistemas. En la mayoría de los sistemas, esa llamada al 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 un límite separado en el tamaño de un solo argumento.

Para obtener más detalles, consulte:

Para evitar ese límite, puede usar (asumiendo GNU xargso compatible):

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

Arriba, dado que printfestá integrado (en bashla mayoría de los shells tipo Bourne), no llegamos al execve()límite. Y xargsdividirá la lista de argumentos en tantas rminvocaciones como sea necesario para evitar la execve()limitación.

Con zsh:

autoload zargs
zargs foo* -- rm -f

Con ksh93:

command -x rm -f foo*

Respuesta2

Puedes ver el límite para el tamaño total de los argumentos con:

getconf ARG_MAX

Esto generalmente no está determinado por el shell, sino por el sistema operativo subyacente de acuerdo conesta respuesta.

información relacionada