
Ich habe eine Liste von Dateien in einer Datei cache_temp
.
Im Ordner cache_temp
:
/home/maildir/mydomain.com/een/new/1491397868.M395935P76076.nm1.mydomain.com,S=1740,W=1777
/home/maildir/mydomain.com/een/new/1485873821.M199286P14170.nm1.mydomain.com,S=440734,W=446889
/home/maildir/mydomain.com/td.pr/cur/1491397869.M704928P76257.nm1.mydomain.com,S=1742,W=1779:2,Sb
/home/maildir/mydomain.com/td.pr/cur/1501571359.M552218P73116.nm1.mydomain.com,S=1687,W=1719:2,Sa
/home/maildir/mydomain.com/td.pr/cur/1498562257.M153946P22434.nm1.mydomain.com,S=1684,W=1717:2,Sb
Ich habe ein einfaches Skript zum Ermitteln der Dateigröße von cache_temp
:
#!/bin/bash
for i in `grep -v ^# ~/cache_temp | grep -v "dovecot.index.cache"`; do
if [ -f "$i" ]; then
size=$(du -sh "$i" | awk '{print $1}')
echo $size
fi
done
Ich habe eine Liste mit Dateigrößen:
4,0K
4,0K
4,0K
432K
4,0K
Wie kann ich die Summe davon berechnen?
Antwort1
Verwenden Sie stat
stattdessen du
:
#!/bin/bash
for i in `grep -v ^# ~/cache_temp | grep -v "dovecot.index.cache"`; do
[ -f "$i" ] && totalsize=$[totalsize + $(stat -c "%s" "$i")]
done
echo totalsize: $totalsize bytes
Antwort2
Laut du(1) gibt es eine Option -c, deren Zweck es ist, die Gesamtsumme zu ermitteln.
% du -chs * /etc/passwd
92K ABOUT-NLS
196K NEWS
12K README
48K THANKS
8,0K TODO
4,0K /etc/passwd
360K total
Antwort3
Wenn Sie die Datei verwenden müssen, ist dieser Codeausschnitt hoffentlich hilfreich.
xargs -a cache_file stat --format="%s" | paste -sd+ | bc -l
Dies xargs
dient dazu, ein Überschreiten des Argumentlimits zu verhindern und gleichzeitig die maximale Anzahl an Dateien bei einem Aufruf jedes stat
Mal zu erreichen.
Antwort4
Nun ... Ob gut oder schlecht, hier ist meine Implementierung davon. Ich habe es immer vorgezogen, „while“ zu verwenden, um Zeilen aus Dateien zu lesen.
#!/bin/bash
SUM=0
while read file; do
SUM=$(( $SUM + $(stat $file | awk '/Size:/ { print $2 }') ))
done < cache_temp
echo $SUM
Gemäß Janos‘ Empfehlung unten:
#!/bin/bash
while read file; do
stat $file
done < cache_temp | awk 'BEGIN { s=0 } $1 == "Size:" { s=s+$2 } END { print s; }'