Dies hängt hauptsächlich von Ihrer Version des Linux-Kernels ab.
Sie sollten in der Lage sein, das Limit für Ihr System zu sehen, indem Sie ausführen
getconf ARG_MAX
Dies gibt an, wie viele Bytes eine Befehlszeile maximal haben darf, nachdem sie von der Shell erweitert wurde.
Unter Linux <2.6.23 beträgt das Limit normalerweise 128 KB.
Unter Linux> = 2.6.25 beträgt das Limit entweder 128 KB oder 1/4 Ihrer Stapelgröße (siehe ulimit -s
), je nachdem, welcher Wert größer ist.
Weitere Informationen finden Sie auf der Manpage execve (2) .
Leider kann ls *.txt
das Problem durch Piping nicht behoben werden, da das Limit im Betriebssystem und nicht in der Shell liegt.
Die Shell erweitert das *.txt
und versucht dann aufzurufen
exec("ls", "a.txt", "b.txt", ...)
und Sie haben so viele passende Dateien, *.txt
dass Sie das 128-KB-Limit überschreiten.
Sie müssen so etwas tun
find . -maxdepth 1 -name "*.txt" | wc -l
stattdessen.
(Siehe auch Shawn J. Goffs Kommentare zu Dateinamen, die Zeilenumbrüche enthalten.)
ls
-Ausgabe , was eine schlechte Idee ist. Vermeiden Sie es also besser. Informationen zum Zählen finden Sie unter Wie wird die Anzahl der Dateien in einem Verzeichnis am besten gezählt? Lesen Sie für eine knifflige Umgehung, warum for loop den Fehler "argument too long" nicht auslöst. .