Es gibt eine maximale Länge der Argumentliste für einen neuen Prozess im POSIX-System. findteilt die Ausführung auf, wenn die Dateipfade länger sind. Um das Limit unter Linux zu sehen, verwenden Sie xargs --show-limits(funktioniert nicht unter Mac OS, wenn jemand eine bessere Alternative kennt, kommentieren Sie bitte hier)
edit: direkt aus Gnoucs Antwort gestohlen, der POSIX-Weg, um die maximale Länge der Argumentliste zu erhalten, ist getconf ARG_MAX. Ich habe jedoch ein Experiment auf meinem Mac OS-Computer durchgeführt, und es sieht so findaus, als würde etwas mehr als die Hälfte dieser Zahl verwendet. Dies steht im Einklang mit der Tatsache, dass auf dem System, auf dem es funktioniert, angegeben xargs --show-limitswird, dass nicht die maximale Argumentlänge verwendet wird (auch in diesem Fall wird etwa die Hälfte dieser Zahl verwendet), ich konnte jedoch keine Erklärung finden dafür.
edit 2: Es scheint, dass die einzige zuverlässige Methode, um zu bestimmen, wie viele Parameter findfür jeden Aufruf zusammenhalten, das Experimentieren ist, beispielsweise durch Ausführen
find / -exec echo {} + | wc -cl
Da die Ausgabe von findfür jeden echoAufruf eine Zeile enthält , können sie mit gezählt werden wc -l. Die Gesamtzahl der Bytes echoist die Ausgabe von wc -cstattdessen. Wenn Sie eine durch die andere teilen, erhalten Sie die durchschnittliche Anzahl von Bytes in den Parametern für jeden Befehlsaufruf (wenn auch aufgrund der Rundung ein etwas niedrigerer Wert, ungefähr die Hälfte der durchschnittlichen Länge eines Pfads in Ihrem System).
find / -exec echo | wcund das Verhältnis zwischen Zeichenanzahl und Zeilenanzahl gemessen. Ich habe festgestellt, dass die maximale Befehlszeilenlänge, die von verwendetfindwird, erheblich kleiner als die theoretische POSIX-Grenze ist und viel näher an derSize of command buffer we are actually usingZeile in der Ausgabe von liegtxargs --show-limits. Dies gilt für Linux und möglicherweise für die Mac OS-Implementierung vonfind, obwohlxargsder Wert in Mac OS nicht gedruckt wird. Irgendeine Idee, warum das passiert?