Patrick Schulz wrote: > Markus Schönhaber schrieb: > > Da die maximale Pfadlänge aber deutlich geringer ist als die maximale > > Länge der Parameterliste, dürften besagte Einschränkungen für das zur > > Diskussion stehende Problem nicht von Bedeutung sein. > > Da bin ich mir nicht so sicher. > Wir reden hier über mehrere Hunderttausend Dateien...
...was im Bezug auf die Längenbeschränkung der Parameterliste in diesem Fall ohne Bedeutung ist, wie Du weiter unten ja selbst feststellst. > Ich bin mir nicht sicher in wie weit das geschilderte Problem auch > garantiert zu lösen ist. > Dein Vorschlag über while read an die Lösung heran zu gehen, scheint > zumindest in Bezug auf die Parameteranzahl kein Problem zu sein. > > > Aber ich glaube, eben habe ich mir meinen Holzweg selbst erklärt. > - Die Ein- und Ausgabe von xargs ist an sich ja keine Parameterliste, > sondern ein Stream > - Die Ausgabe des des find command ebenfalls > In so fern kommt in keinem der Fälle das Problem mit der Parameteranzahl > zum Tragen. Korrekt? Genau. Die Längenbeschränkung der Parameterliste kommt erst dadurch ins Spiel, daß sowohl find -exec als auch xargs weitere Prozesse starten. Die Argumente, die sie diesen zu startenden Prozessen auf den Weg geben, dürfen eben längentechnisch einen bestimmten Wert nicht überschreiten. Aber wie schon gesagt: Die maximale Länge der Parameterliste ist deutlich größer als die maximale Länge eines Pfadnamens. Im schlimmsten Fall müßte xargs also für jedes einzelene Parameterelement, das es von stdin liest, einen neuen Prozess starten und könnte diesem nicht gleich mehrere mitgeben, wie es das standardmäßig tut. Und find -exec startet m. W. sowieso für jeden Treffer erneut den jeweiligen Prozess. BTW: Meinen Verständnis nach ist einer der Gründe für die Existenz von xargs ja gerade, daß man damit die Längenbeschränkung der Parameterliste umgehen kann. Wenn Du bspw. ein Verzeichnis mit den von Dir erwähnten mehreren hunderttausend Dateien hast, wird ein cp * /irgend/wo/hin vermutlich fehlschlagen, während ls | xargs cp --target-directory=/irgend/wo/hin problemlos funktionieren sollte[1]. Gruß mks [1] Sicher, wenn die Ausgabe von ls auch Verzeichnisnamen, Namen mit Leerzeichen etc. enthält, wird das in diesem Beispiel Probleme geben. Aber es dürfte klar sein, worauf ich hinaus will.
-- ---------------------------------------------------------------------------- PUG - Penguin User Group Wiesbaden - http://www.pug.org

