Dipende principalmente dalla tua versione del kernel Linux.
Dovresti riuscire a vedere il limite del tuo sistema eseguendolo
getconf ARG_MAX
che indica il numero massimo di byte che una riga di comando può avere dopo essere stata espansa dalla shell.
In Linux <2.6.23, il limite è generalmente di 128 KB.
In Linux> = 2.6.25, il limite è di 128 KB o 1/4 della dimensione dello stack (vedi ulimit -s
), a seconda di quale sia maggiore.
Vedi la pagina man execve (2) per tutti i dettagli.
Sfortunatamente, le tubazioni ls *.txt
non risolveranno il problema, perché il limite è nel sistema operativo, non nella shell.
La shell espande il *.txt
, quindi tenta di chiamare
exec("ls", "a.txt", "b.txt", ...)
e hai così tanti file corrispondenti *.txt
che stai superando il limite di 128 KB.
Dovrai fare qualcosa del genere
find . -maxdepth 1 -name "*.txt" | wc -l
anziché.
(E vedi sotto i commenti di Shawn J. Goff sui nomi dei file che contengono nuove righe.)
ls
, che è una cattiva idea, quindi meglio evitarlo. Per il conteggio vedi Qual è il modo migliore per contare il numero di file in una directory? , per una soluzione complicata vedi perché for loop non genera l'errore "argomento troppo lungo"? .