Lösung
Indem Sie die Option -c
(oder --total
) an du(1)
angeben, können Sie sie anweisen, eine Gesamtsumme zu erstellen. Wenn Ihre Implementierung du(1)
eine dieser Optionen unterstützt, können Sie den gewünschten Effekt mit dem folgenden Befehl erzielen:
$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +
BEARBEITEN: Beachten Sie, dass die Anzahl der Dateien, die die von Ihrem System maximal zulässige Anzahl von Parametern überschreitet, find
möglicherweise noch command
mehrmals ausgeführt wird. Einige Implementierungen du(1)
unterstützen auch das Lesen der Dateinamen aus einer Datei, die nicht unter der genannten Einschränkung leidet:
$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames
Erläuterung
Der Unterschied zwischen der Semantik von -exec command {} \;
und -exec command {} +
ist der folgende:
command {} \;
wird command
einmal für jedes Ergebnis von ausgeführt find
. Der Pfadname des Ergebnisses wird anstelle von übergeben {}
.
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} \;
1
2
3
command {} +
wird ausgeführt command
, wenn alle Ergebnisse abgerufen wurden. Die Pfadnamen der Ergebnisse werden anstelle von übergeben {}
.
$ touch 1 2 3
$ find 1 2 3 -maxdepth 0 -exec echo {} +
1 2 3
Die -print0
Option bewirkt find(1)
, dass die gefundenen Dateinamen in die durch das Nullzeichen getrennte Standardausgabe gedruckt werden, und die --files0-from
Option bewirkt du(1)
, dass die durch Null getrennten Dateinamen gelesen werden. Im Gegensatz zum neuen Zeilenzeichen wird das Nullzeichen möglicherweise nicht in einem Dateinamen angezeigt, sodass die Ausgabe eindeutig ist.
Um mehr über die Optionen von du(1)
und zu erfahren find(1)
, sollten Sie die entsprechenden Manpages konsultieren:
$ man du
$ man find