Ich habe mir schon einmal die Sortierung der Ergebnisse von du
angesehen und habe immer nur Vorschläge für sort
Ergebnisse wie gesehen du | sort
.
Dies ist für die meisten Anwendungen akzeptabel, ist aber insbesondere dann nicht hilfreich, wenn mehrere Verzeichnisse mit Hardlinks aufgelistet werden. Ich habe beispielsweise ein inkrementelles Backup:
Wenn du
Hardlinks doppelt gezählt werden, sieht der Inhalt so aus
# du -hl --max-depth 1 /backup/saturn/ | sort -k 2
3.2G /backup/saturn/
456M /backup/saturn/2017-05-19
458M /backup/saturn/2017-05-20
461M /backup/saturn/2017-05-21
464M /backup/saturn/2017-05-22
462M /backup/saturn/2017-05-23
462M /backup/saturn/2017-05-24
465M /backup/saturn/2017-05-25
Aber diese Ergebnisse stimmen nicht, da jedes datierte Verzeichnis viele Hardlinks zu den Dateien anderer Verzeichnisse enthält.... Es handelt sich um eine inkrementelle Sicherung.
Das aussagekräftigere Ergebnis sieht aber so aus.
# du -h --max-depth 1 /backup/saturn/ | sort -k 2
666M /backup/saturn/
29M /backup/saturn/2017-05-19
53M /backup/saturn/2017-05-20
25M /backup/saturn/2017-05-21
40M /backup/saturn/2017-05-22
462M /backup/saturn/2017-05-23
14M /backup/saturn/2017-05-24
46M /backup/saturn/2017-05-25
Das ist ein wenig unsinnig, da die Verzeichnisse in einer willkürlichen Reihenfolge ausgewertet werden und daher viel weniger aussagekräftige Informationen darüber geliefert werden, wie viel sich von einem Datum zum nächsten geändert hat.
Daher suche ich nach einer Möglichkeit, die Reihenfolge du
der Auswertung von Verzeichnissen zu steuern.
Antwort1
Erweiterung aufRidgys Kommentar, neuere Versionen du
können mit dieser Option eine Liste der zu scannenden Dateien lesen. --files0-from
Sie haben also folgende Möglichkeiten:
printf "%s\0" /backup/saturn/*/ | sort -z | du --files0-from=- -h --total
Zum Beispiel:
$ du -hxd1 foo
111M foo/2017-05-20
4.0K foo/2017-05-19
4.0K foo/2017-05-30
111M foo
Und:
$ printf "%s\0" foo/*/ | sort -z | du --files0-from=- -h --total
101M foo/2017-05-19/
11M foo/2017-05-20/
4.0K foo/2017-05-30/
111M total
Sie können es verwenden find
, wenn zu viele Dateien zum Globgen vorhanden sind printf
, aber es ist etwas ausführlich:
$ find foo -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | du --files0-from=- -h --total
101M foo/2017-05-19
11M foo/2017-05-20
4.0K foo/2017-05-30
111M total