2 Stimmen

Wie kann ich die Größe von bestimmten Dateien ermitteln?

Der Befehl versucht, die Größen zu summieren:

find . -iname "*.dmg" -exec du -sh '{}' \; 3&> /dev/null |
    awk '{print $1}' | summming_up_program???

Können Sie eine einfachere Lösung finden?

Ubuntu-Lösung. Danke für das Awk-Ende an Ayman.

find . -iname "*.dmg" -printf '%b\n' |
    awk 'BEGIN { s = 0 } {s += $1 } END { print "%dMB", s / 2^20 }'

3voto

Ayman Hourieh Punkte 122012
find . -iname '*.dmg' -exec stat -f '%z' '{}' \; |
     awk 'BEGIN { s = 0 } {s += $1 } END { print s }'

stat wird verwendet, um die Größe einer Datei zu ermitteln. awk wird verwendet, um alle Dateigrößen zu summieren.

Editar:

Eine Lösung, die sich nicht gabelt stat :

find . -iname '*.dmg' -ls | 
     awk 'BEGIN { s = 0 } {s += $7 } END { print s }'

1voto

Paweł Polewicz Punkte 3591
wc -c *.pyc | tail -n1 | cut -f 1 -d ' '

Das könnte schneller gehen, als die Dateien durch die Leitung zu katalogisieren. wc -c zählt nicht die Bytes, sondern holt sich die Größe aus dem Inode... oder meine Festplatte hat eine Lesegeschwindigkeit von 717 GB/s :-)

$ time wc -c very-big.pcap
5394513291 very-big.pcap
real    0m0.007s
user    0m0.000s
sys     0m0.000s

0voto

Matthias Wandel Punkte 6183

Cat *.dmg | wc -c

cat kopiert alle Dateien nach stdout, und wc zählt die Größe der ausgegebenen Dateien. Es wird nichts auf die Festplatte geschrieben.

Nicht so effizient, aber sogar ich kann es verstehen :)

0voto

Verbesserung von Aymans Nicht-Gabelung-Befehl:

find . -iname '*.dmg' -ls 3&> /dev/null | 
      awk 'BEGIN { s = 0 } {s += $7 } END { print "%dGB", s / 2^30 }'

Danke an Ayman für die Korrektur meiner ersten Antwort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X