Cela dépend principalement de votre version du noyau Linux.
Vous devriez pouvoir voir la limite de votre système en lançant
getconf ARG_MAX
qui vous indique le nombre maximal d'octets qu'une ligne de commande peut avoir après avoir été développée par le shell.
Sous Linux <2.6.23, la limite est généralement de 128 Ko.
Sous Linux> = 2.6.25, la limite est 128 Ko ou 1/4 de la taille de votre pile (voir ulimit -s
), selon la valeur la plus grande.
Voir la page de manuel execve (2) pour tous les détails.
Malheureusement, la tuyauterie ls *.txt
ne résoudra pas le problème, car la limite se trouve dans le système d'exploitation, pas dans le shell.
Le shell développe le *.txt
, puis essaie d'appeler
exec("ls", "a.txt", "b.txt", ...)
et vous avez tellement de fichiers correspondants *.txt
que vous dépassez la limite de 128 Ko.
Vous devrez faire quelque chose comme
find . -maxdepth 1 -name "*.txt" | wc -l
au lieu.
(Et voir ci-dessous les commentaires de Shawn J. Goff sur les noms de fichiers contenant des nouvelles lignes.)
ls
, ce qui est une mauvaise idée, alors mieux vaut l’éviter. Pour compter, voir Quelle est la meilleure façon de compter le nombre de fichiers dans un répertoire? , pour une solution de contournement délicate, voyez pourquoi la boucle for ne soulève pas l’erreur “argument too long”? .