Ich habe ein Verzeichnis mit vielen Fotos. Speziell du -sh --apparent-size /path/to/myfolder
gibt mir 331G. Was toll ist. Aber jetzt möchte ich eine nach Monaten gruppierte Auflistung bekommen, zB so etwas:
2016-01 20MB
2016-02 520MB
2016-03 312MB
...
Gibt es eine (vernünftige) Möglichkeit, dies unter Linux zu tun, oder sollte ich einfach mein eigenes Python-Dienstprogramm schreiben, um dies zu tun?
shell
files
disk-usage
Wayne Werner
quelle
quelle
Antworten:
Versuchen Sie unter Linux:
Wie es funktioniert
find /my/path
Dies sucht nach Dateien in / my / path.
-maxdepth 1
Dies weist an,
find
nicht in Unterverzeichnisse zu schauen. (Wenn Sie eine rekursive Suche wünschen, lassen Sie diese Option aus.)-type f
Dadurch wird
find
die Suche auf reguläre Dateien beschränkt.-printf '%TY-%Tm %s\n'
Dies teilt
find
mit, dass Jahr-Monat gefolgt von der Größe in Bytes für jede Datei gedruckt werden soll.Da wir keine Verwendung für sie haben, werden die Namen der gefundenen Dateien nicht gedruckt.
b[$1]+=$2
Für jede gefundene Datei addieren wir die Anzahl der gefundenen Bytes aus Spalte 2 zu der Anzahl dieser Jahr-Monat-Kombination im assoziativen Array
b
.END{for (date in b) print date, b[date]}
Nachdem wir die gesamte Ausgabe von verarbeitet haben
find
, drucken wir die Ergebnisse aus.sort
Dadurch werden die Ergebnisse in der Reihenfolge des Datums sortiert.
Mehrzeilige Version
Für diejenigen, die ihren Code auf mehrere Zeilen verteilen möchten:
Beispiel
Betrachten wir ein Verzeichnis mit diesen Dateien:
Die Ausgabe unseres Befehls lautet:
Verfeinerungen
Wenn die Ausgabe in Mebibyte (MiB) statt in Bytes erfolgen soll, können wir die Einheiten folgendermaßen konvertieren:
Mit können wir das Ausgabeformat noch besser steuern
printf
. Um nur eine Stelle nach dem Komma zu behalten, formatieren wir die Größe mit%5.1f
:quelle
printf "%s %9d\n", date, b[date]
anstelle vonprint date, b[date]
Leerzeichen in der zweiten Spalteprintf
.find
diese Unterstützung haben , haben-maxdepth
Sie wahrscheinlich[g]awk
diese UnterstützungPROC_INFO["sorted_in"]="@ind_str_asc"