So ändern Sie die Du-Rekursionsreihenfolge

So ändern Sie die Du-Rekursionsreihenfolge

Ich habe mir schon einmal die Sortierung der Ergebnisse von duangesehen und habe immer nur Vorschläge für sortErgebnisse 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 duHardlinks 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 duder Auswertung von Verzeichnissen zu steuern.

Antwort1

Erweiterung aufRidgys Kommentar, neuere Versionen dukönnen mit dieser Option eine Liste der zu scannenden Dateien lesen. --files0-fromSie 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

verwandte Informationen