Johannes Knelangen wrote:
> Hier ist Johannes aus Bremen.
Hallo. Sinnvoller wäre es gewesen, wenn Du geschrieben hättest, welches
System und welche Programmversionen Du benutzt. So kann man nur raten, dass
Du das System benutzt, mit dem Du postest – “User-Agent: Gnus/5.13 (Gnus
v5.13) Emacs/23.3 (*gnu*/linux)” – was aber der Problembeschreibung
irgendwie widerspricht.
> Die folgende Zeile macht in einer aktuellen bash nicht das, was ich
> erwarten würde:
>
> find -maxdepth 1 -type d -print0 | xargs -0 du -hs
“-maxdepth” und “-print0” sind Optionen/Operatoren von *GNU* find.
> Es wird lediglich die Größe des aktuellen Verzeichnisses, ".",
> ausgegeben. Also praktisch das, was "du -hs ." ausgeben würde.
Das deutet darauf hin, dass find(1) keine Ausgabe auf stdout erzeugt. xargs
erhält also keine weiteren Parameter über die Pipe und kann folglich auch
keine an du(1) übergeben. Also tut du(1) das, was es immer tut, wenn kein
Verzeichnis angegeben wird: es verwendet das aktuelle Verzeichnis (“.”).
> find -maxdepth 1 -type d -exec du -hs '{}' \;
>
> macht dagegen das, was ich möchte, nämlich die Ausgabe der Gesamtgröße
> für jedes direkte Unterverzeichnis.
Mit “-maxdepth” dürfte ein POSIX find(1) gar nichts tun (ausser eine
Fehlermeldung ausgeben). Das ist also wohl nicht der Grund, weshalb find(1)
hier nichts Sinnvolles ausgibt.
> Was ist an der Version mit xargs falsch,
Vermutlich generiert find(1) keine Ausgabe.
> resp. wie muss ich diese schreiben, damit das gleiche herauskommt wie bei
> dem Aufruf von find mit Argument -exec ?
POSIX-konform, was auch von GNU find(1) unterstützt wird, wäre
find . -name . -or -prune -type d -exec du -hs '{}' +
Die sichere Variante mit xargs bei GNU wäre
find . -maxdepth 1 -type d -print0 | xargs -0r du -hs --
Das verhindert erstens, dass du(1) aufgerufen wird, wenn xargs keine Eingabe
erhält (“-r”) und zweitens, dass Dateinamen, die mit “-” beginnen, von du(1)
als Optionen betrachtet werden (“--”)
--
PointedEars
Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.