• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Dateigrösse ermitteln

Escho

Advanced Hacker
Hallo

Ich möchte, abhängig von der Grösse einer Datei, unterschiedliche Aktionen durchführen. Dazu habe ich folgendes Testscript verfasst:
Code:
#!/bin/sh

Filmgroesse=`wc -c /filmbearbeitung/aufnahme/carlysimon.m2t` #Groesse=108779808

if [ $Filmgroesse -lt 200000000 ]
then
	anzeige="kleiner"
else
	anzeige="groesser"
fi
Xdialog --msgbox $Filmgroesse 20 20
Xdialog --msgbox $anzeige 20 20
Nun wird die korrekte Dateigrösse zwar angezeigt, aber auch behauptet, die Datei wäre grösser als der Vergleichswert von 200 Millionen. Und das ist offensichtlich falsch.

Wo liegt mein Denkfehler?

Edgar
 

spoensche

Moderator
Teammitglied
Mit du bekommst du die Dateigröße.

Code:
mit du -hs dateiname
bekommst du die Dateigröße in MB o. GB, also im für Menschen lesbaren format. Nur mit dem Aufruf von du bekommst du die Dateigröße in Bytes.
 
OP
Escho

Escho

Advanced Hacker
Hallo spoensche

Mit wc -c dateiname bekomme es ebenso heraus. Du hast mich aber auf die Idee gebracht, wo der Fehler liegt.
Ich bin nämlich davon ausgegangen, daß die Ausgabe als Ganzzahl erfolgt. Das scheint mir aber, sowohl mit du, als auch mit wc ein string zu sein. Und damit kann meine Abfrage nicht funktionieren.

Gibt es keinen Befehl, der die Dateigrösse als Ganzzahl übergibt?

Edgar
 

spoensche

Moderator
Teammitglied
Mit wc -c bekommst du die Dateigröße definitiv nicht heraus. Mit wc -c bekommst du lediglich nur die Anzahl der Character (Zeichen). Das hat allerdings mit der eigentlichen Dateigröße nichts zu tun weil ein Zeichen mehrere Bytes an größe hat, jenachdem wie viele Bytes oder Bits du benötigst, um das Zeichen darstellen zu können.

Weiterhin variert die Dateigröße auch durch das Dateisystem, z.B. wird die Datei autom. größer wenn Sie nur einen bestimmten Teil an Inodes benötigt, wobei es durchaus sein kann, dass der letzte Inode nicht voll genutzt wird.
 
OP
Escho

Escho

Advanced Hacker
Mit wc -m ermittle ich die die Zeichenzahl, mit wc -c die Anzahl der Bytes.
--> man wc

Edgar
 
A

Anonymous

Gast
Escho schrieb:
Filmgroesse=`wc -c /filmbearbeitung/aufnahme/carlysimon.m2t` #Groesse=108779808

Hast du dir schon mal angeschaut was wc -c /datei für eine Ausgabe macht.
Setz einfach zB | cut -f1 -d " " noch dahinter, dann klappst auch mit dem test

oder einfach nur
Code:
stat -c %s Datei
ist ein bissel kürzer

robi
 
OP
Escho

Escho

Advanced Hacker
Servus robi

Das mit dem cut kann nicht klappen, da es ja ein String bleibt und ich Zahlen vergleichen will.
Die stat-Anweisung dagegen funktioniert. Danke!

Edgar
 
Filmgroesse=`wc -c </filmbearbeitung/aufnahme/carlysimon.m2t`
oder
Filmgroesse=`cat /filmbearbeitung/aufnahme/carlysimon.m2t | wc- c`

Wie robi schon sagte, wc "dateiname" gibt nicht nur die Größe aus und dann kann man
nicht ordentlich mit Zahlen vergleichen...

Haveaniceday
 

spoensche

Moderator
Teammitglied
Ich muss euch aber gerade mal etwas mitteilen bzw. korrigieren.

Code:
wc -c

zählt nur die anzahl der Zeichen in einer Datei, was NICHT die Dateigröße ist.

Die Dateigröße ermittelt man mit:

Code:
du
 
Hmm, sicher ? Lügt die Man-Page ?
Code:
      -c, --bytes
              print the byte counts

       -m, --chars
              print the character counts

spoensche schrieb:
Ich muss euch aber gerade mal etwas mitteilen bzw. korrigieren.

Code:
wc -c

zählt nur die anzahl der Zeichen in einer Datei, was NICHT die Dateigröße ist.

Die Dateigröße ermittelt man mit:

Code:
du
 
Oben