[erweiterte Version]
Dies wird viel schneller und präziser sein als die unten stehende ursprüngliche Version und gibt die Summe aller Dateigrößen des aktuellen Verzeichnisses aus:
echo `find . -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
Der stat -c %s
Befehl für eine Datei gibt ihre Größe in Byte zurück. Der tr
Befehl hier wird verwendet, um xargs
Befehlsbeschränkungen zu überwinden (anscheinend werden die xargs
Ergebnisse in mehrere Zeilen aufgeteilt, wodurch die Logik meines Befehls verletzt wird). Daher tr
wird darauf geachtet, den Zeilenvorschub durch ein +
Pluszeichen zu ersetzen . sed
hat das einzige Ziel, das letzte +
Vorzeichen aus der resultierenden Zeichenfolge zu entfernen , um Beschwerden beim letzten bc
Befehl (Basisrechner) zu vermeiden , der wie üblich die Mathematik ausführt.
Leistung: Ich habe es in mehreren Verzeichnissen getestet und über 150.000 Dateien oben (die aktuelle Anzahl der Dateien meiner Fedora 15-Box), was meiner Meinung nach ein erstaunliches Ergebnis ist:
# time echo `find / -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
12671767700
real 2m19.164s
user 0m2.039s
sys 0m14.850s
Nur für den Fall, dass Sie einen Vergleich mit dem du -sb /
Befehl durchführen möchten , wird eine geschätzte Festplattennutzung in Bytes ausgegeben ( -b
Option).
# du -sb /
12684646920 /
Wie ich erwartet hatte, ist es etwas größer als meine Befehlsberechnung, weil die du
Dienstprogramm den zugewiesenen Speicherplatz jeder Datei und nicht den tatsächlich verbrauchten Speicherplatz zurückgibt.
[Erstversion]
Sie können den du
Befehl nicht verwenden, wenn Sie die genaue Summengröße Ihres Ordners kennen müssen, weil (gemäß Manpage-Zitat)du
die Speicherplatznutzung geschätzt wird. Daher führt dies zu einem falschen Ergebnis, einer Annäherung (möglicherweise nahe an der Summengröße, aber höchstwahrscheinlich größer als die tatsächlich gesuchte Größe).
Ich denke, es gibt verschiedene Möglichkeiten, Ihre Frage zu beantworten, aber dies ist meine:
ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc
Es findet alle Dateien unter. Verzeichnis (ändern. mit jedem Verzeichnis, das Sie möchten), auch versteckte Dateien sind enthalten und (mit xargs
) gibt ihre Namen in einer einzigen Zeile aus, dann erstellt eine detaillierte Liste mit ls -l
. Diese (manchmal) riesige Ausgabe wird in Richtung des Befehls cut geleitet, und nur das fünfte Feld ( -f5
), bei dem es sich um die Dateigröße in Bytes handelt, wird verwendet und erneut weitergeleitet, xargs
wodurch wiederum eine einzelne Zeile von Größen erzeugt wird, die durch Leerzeichen getrennt sind. Nehmen Sie nun eine Sed-Magie vor, die jedes Leerzeichen durch ein Pluszeichen ( +
) ersetzt und schließlich bc
(Basisrechner) die Mathematik durchführt.
Möglicherweise ist eine zusätzliche Optimierung erforderlich, und Sie haben möglicherweise einen ls
Befehl, der sich zu lange über die Liste der Argumente beschwert.