Vorausgesetzt, es gibt keine internen Hardlinks (dh jede Datei mit mehr als einem Hardlink ist von außerhalb des Baums verlinkt), können Sie Folgendes tun:
find . -links -2 -print0 | du -c --files0-from=-
BEARBEITEN Und hier ist, was ich in dem Kommentar skizziert habe, angewendet. Nur ohne du
; Ein großes Lob an @StephaneChazelas für das Bemerken du
ist nicht erforderlich. Erklärung am Ende.
( find . -type d -printf '%k + ' ; \
find . \! -type d -printf '%n\t%i\t%k\n' | \
sort | uniq -c | \
awk '$1 >= $2 { print $4 " +\\" }' ; \
echo 0 ) | bc
Wir erstellen eine Zeichenfolge mit der Datenträgerverwendung (in KB) jeder relevanten Datei, die durch Pluszeichen getrennt ist. Dann füttern wir diese große Zugabe zu bc
.
Der erste find
Aufruf erledigt das für Verzeichnisse.
Die zweite find
Option gibt die Anzahl der Links, den Inode und die Festplattennutzung aus. Wir durchlaufen diese Liste sort | uniq -c
, um eine Liste zu erhalten (Anzahl der Auftritte im Baum, Anzahl der Links, Inode, Festplattennutzung).
Wir durchlaufen diese Liste awk
und drucken das vierte Feld, wenn das erste Feld (Anzahl der Erscheinungsbilder) größer oder gleich dem zweiten Feld (Anzahl der Hardlinks) ist, dh, es gibt keine Links zu dieser Datei von außerhalb des Baums. Datenträgernutzung) mit einem Pluszeichen und einem Backslash.
Schließlich geben wir a aus 0
, damit die Formel syntaktisch korrekt ist (es würde +
sonst en geben ) und übergeben sie an bc
. Puh.
(Aber ich würde die einfachere erste Methode verwenden, wenn sie eine ausreichend gute Antwort liefert.)
du
die Dateigrößen nur einmal, auch wenn sie fest miteinander verknüpft sind, es sei denn, Sie verwenden die Option-l
/--count-links
. Sie werdendu
zweimal mit und ohne diese Option auf dem gesamten Baum ausgeführt. Der Unterschied zwischen den Größen sollte darin bestehen, wie viel Speicherplatz Sie in allen Verzeichnissen gespeichert haben.