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 *.txtne 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 *.txtque 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”? .