dateigroessen zusammenaddieren

Post Reply
Message
Author
andre

dateigroessen zusammenaddieren

#1 Post by andre »

hi,
ich habe eine textdatei die eine liste von dateien erhaelt, zb:
"
/etc/fstab
/etc/passwd
"
wie kann ich nun in einem bash-script die gesamt-groesse beider dateien berechnen?
die dateigroessen sollen in bytes eingelesen, und in kb/mb-werten ausgegeben werden.
wenn zb /etc/fstab 5100bytes, und die /etc/passwd 23453bytes gross waeren, soll das script mir "28kb" ausgeben...

thnxs & gruss,
andre

ratte

Re: dateigroessen zusammenaddieren

#2 Post by ratte »

haette ich ja nicht gedacht, aber die bash kann ja wirklich rechnen:

bash-2.03$ factor 27417
27417: 3 13 19 37

siehe <a href="http://www.tldp.org/LDP/abs/html/mathc.html" target="_blank"><!--auto-->http://www.tldp.org/LDP/abs/html/mathc. ... <!--auto-->

aber der job ist mir zu stressig in bash.
-file oeffnen
-zeilenweises parsen
-die dategroessen ermitteln
-nach kb konvertieren

haste denn kein perl auf der buechse? das koennte ich schneller zusammenhuehnern.

schon mal `man du` gelesen?

ratte

hubert

Re: dateigroessen zusammenaddieren

#3 Post by hubert »

TEXTDATEI enthält die liste der files.

for FILE in `cat $TEXTDATEI `; do
#....
done
durchläuft alle einträge der inputdatei

ISIZE=`cat $FILE | wc -c`
ermittelt die zahl der zeichen einer datei (ich glaub die white-spaces werden nicht erfasst -- ggf einen zusätzlichen parameter finden oder ein ganz anderes verfahren wählen, ich denk es gibt mehrere varianten).

aufaddieren der gesamtzahl innerhalb der loop:
TOTALB=$[ TOTALB + ISIZE ]
(TOTALB natürlich vorher initialisieren).

jetzt hast du die zahl in bytes.

jetzt unterscheiden, ob in b/kb/mb (umständlich, weil logarithmusfunktion nicht implementiert ist):
TOTALK=$[ TOTALB / 1024 ]
TOTALM=$[ TOTALK / 1024 ]

jetzt steht in TOTALB/K/M die grösse in byte/KB/MB. wenn TOTALM != 0 gibts du die aus. sonst, wenn TOTALK != 0 die KB, andernfalls die bytes.
# ps: ich weiss nicht was für grosse zahlen in der bash erlaubt sind.

jetzt noch alles zusammenbauen -- und debuggen.

hubert.

hubert

Re: dateigroessen zusammenaddieren

#4 Post by hubert »

ich hab's spasseshalber gleich zusammengebaut:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/sh

# $1: inputfile

TOTALB=0
for FILE in `cat $1`; do
ISIZE=`cat $FILE | wc --bytes`
echo "$FILE: $ISIZE b"
TOTALB=$[ TOTALB + ISIZE ]
done

TOTALK=$[ TOTALB / 1024 ]
TOTALM=$[ TOTALK / 1024 ]

if [ $TOTALM -ne 0 ]; then
echo "$TOTALM Mb"
elif [ $TOTALK -ne 0 ]; then
echo "$TOTALK Kb"
else
echo "$TOTALB b"
fi

</font><hr></pre></blockquote>
es wird jeweils abgerundet. andernfalls würde es etwas aufwendiger

h.

andre

Re: dateigroessen zusammenaddieren

#5 Post by andre »

hi,
erstmal ein grosses thnxs fuerdie schnelle hilfe <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

eine nicht zum thema gehoehrende frage haett ich noch <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">...
- wie hast du hier den "code:"-bereich erstellt?

gruss,
andre

hubert

Re: dateigroessen zusammenaddieren

#6 Post by hubert »

> eine nicht zum thema gehoehrende frage haett ich noch ...
> - wie hast du hier den "code:"-bereich erstellt?

oben in der fensterleiste gibt es das icon "hilfe". dort sind alle tags erklärt, die du im board benutzen kannst.

hubert

PS:
> es wird jeweils abgerundet. andernfalls würde es etwas aufwendiger

ich hab nun auch noch die änderungen für die nachkommastelle eingebaut (zb "3.2 Kb"). wenns dich interessiert kann ichs posten.

andre

Re: dateigroessen zusammenaddieren

#7 Post by andre »

hi,
coool, gib her <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

andre

hubert

Re: dateigroessen zusammenaddieren

#8 Post by hubert »

here goes...
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/sh

# $1: inputfile

SUMBYTE=0
for FILE in `cat $1`; do
ISIZE=`cat $FILE | wc --bytes`
#printf "$FILE: \<!--no-->t\<!--no-->t$ISIZE b\<!--no-->n"
SUMBYTE=$[ SUMBYTE + ISIZE ]
done

#echo "================================================="
#echo "Summe: $SUMBYTE bytes"

SUMKILO=$[ SUMBYTE / 1024 ]
REMKILO=$[ SUMBYTE % 1024 ] # remainder
FRCKILO=$[ 10 * REMKILO / 1024 ] # fraction

SUMMEGA=$[ SUMKILO / 1024 ]
REMMEGA=$[ SUMKILO % 1024 ]
FRCMEGA=$[ 10 * REMMEGA / 1024 ]

if [ $SUMMEGA -ne 0 ]; then
echo "$SUMMEGA.$FRCMEGA Mb"
elif [ $SUMKILO -ne 0 ]; then
echo "$SUMKILO.$FRCKILO Kb"
else
echo "$SUMBYTE b"
fi
</font><hr></pre></blockquote>

andre

Re: dateigroessen zusammenaddieren

#9 Post by andre »

nochmal thnxs,

andre

Post Reply