Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
dateigroessen zusammenaddieren

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
andre
Gast





BeitragVerfasst am: 03. Sep 2002 15:30   Titel: dateigroessen zusammenaddieren

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
Gast





BeitragVerfasst am: 03. Sep 2002 16:56   Titel: Re: dateigroessen zusammenaddieren

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

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

siehe http://www.tldp.org/LDP/abs/html/mathc.html

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
Gast





BeitragVerfasst am: 03. Sep 2002 17:08   Titel: Re: dateigroessen zusammenaddieren

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
Gast





BeitragVerfasst am: 03. Sep 2002 19:25   Titel: Re: dateigroessen zusammenaddieren

ich hab's spasseshalber gleich zusammengebaut:
code:

#!/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



es wird jeweils abgerundet. andernfalls würde es etwas aufwendiger

h.
 

andre
Gast





BeitragVerfasst am: 03. Sep 2002 20:58   Titel: Re: dateigroessen zusammenaddieren

hi,
erstmal ein grosses thnxs fuerdie schnelle hilfe

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

gruss,
andre
 

hubert
Gast





BeitragVerfasst am: 03. Sep 2002 21:47   Titel: Re: dateigroessen zusammenaddieren

> 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
Gast





BeitragVerfasst am: 03. Sep 2002 21:50   Titel: Re: dateigroessen zusammenaddieren

hi,
coool, gib her

andre
 

hubert
Gast





BeitragVerfasst am: 03. Sep 2002 22:33   Titel: Re: dateigroessen zusammenaddieren

here goes...
code:

#!/bin/sh

# $1: inputfile

SUMBYTE=0
for FILE in `cat $1`; do
ISIZE=`cat $FILE | wc --bytes`
#printf "$FILE: \t\t$ISIZE b\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

 

andre
Gast





BeitragVerfasst am: 04. Sep 2002 2:46   Titel: Re: dateigroessen zusammenaddieren

nochmal thnxs,

andre
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy