Depende principalmente de su versión del kernel de Linux.
Debería poder ver el límite de su sistema ejecutando
getconf ARG_MAX
que le indica el número máximo de bytes que puede tener una línea de comando después de ser expandida por el shell.
En Linux <2.6.23, el límite suele ser de 128 KB.
En Linux> = 2.6.25, el límite es 128 KB o 1/4 del tamaño de su pila (ver ulimit -s
), el que sea mayor.
Consulte la página del comando man execve (2) para obtener todos los detalles.
Desafortunadamente, las tuberías ls *.txt
no van a solucionar el problema, porque el límite está en el sistema operativo, no en el shell.
El shell expande el *.txt
, luego intenta llamar
exec("ls", "a.txt", "b.txt", ...)
y tiene tantos archivos *.txt
que coinciden que excede el límite de 128 KB.
Tendrás que hacer algo como
find . -maxdepth 1 -name "*.txt" | wc -l
en lugar.
(Y vea los comentarios de Shawn J. Goff a continuación sobre los nombres de archivos que contienen nuevas líneas).
ls
, lo cual es una mala idea, así que mejor evítelo. Para contar, vea ¿Cuál es la mejor manera de contar la cantidad de archivos en un directorio? , para una solución alternativa difícil, ¿por qué for loop no genera un error de "argumento demasiado largo"? .