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

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
shell: Größenvergleich von Dateien

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





BeitragVerfasst am: 27. Jun 2003 11:28   Titel: shell: Größenvergleich von Dateien

Hallo,

ich versuche, in einem sh (nicht bash) Skript die Größe einer Datei herauszufinden:

if [ "`du -k ${DATEI}`" > "1000" ]; then do something; done

Klappt nicht, liefert immer wahr zurück. Auch wenn $DATEI kleiner als 1000K ist. Benutze ich statt ">" "-gt", gibt es einen Fehler, ebenso wenn ich die Anführungszeichen weglasse. $DATEI enthält grundsätzlich keine Leerzeichen.

Ein:

if [ "expr `du -k test` > 1000" ]; then do something; fi

klappt auch nicht. Liefert auch immer wahr zurück. Ohne Anführungszeichen gibt es zur Abwechslung einen Fehler.

Wo ist der Haken ?
 

Jochen
Gast





BeitragVerfasst am: 27. Jun 2003 12:18   Titel: Re: shell: Größenvergleich von Dateien

Benutze doch nächstes Mal das "Programmieren - Allgemein"-Forum für solche Fragen: http://www.pl-forum.de/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowBoard&Board=003&Idle=&Sort=&Order=&Session=

1. Schau Dir doch mal die Ausgabe von "du -k /etc/passwd" an. Das sieht ungefähr so aus:
2      /etc/passwd
Genau diese Ausgabe wird von der Shell dort eingesetzt, wo das du-Kommando in Backticks steht. Beim Grössenvergleich kann man mit dem Text "/etc/passwd" aber nix anfangen...

2. Die eckigen Klammern nach dem if sind eine Kurzschreibweise für das test-Kommando. Mit ">" zum numerischen Vergleich kann test nicht umgehen, es muss schon "-gt" für "greater than" sein. Der Fehler, den Du zurückbekommst, liegt an dem "/etc/passwd", das du u.a. ausgibt.

3. Wenn Du nun ">" verwendest, meint die Shell, Du möchtest eine Dateiausgabeumlenkung machen. Schau mal in das Verzeichnis, in dem Du arbeitest, da findest Du eine Datei mit Namen "1000".

4. Die Kombination von test ([) und expr kann nicht funktionieren, da hier "expr" nicht mehr als Kommando, sondern als erstes Argument zu "[", also test, interpretiert wird.

Das if-Statement könnte so aussehen:
code:

SIZE_KB=`du -k "$DATEI" | cut -f 1`
if [ $SIZE_KB -gt 1000 ] ; then
do_something
else
do_something_else
fi


Das kann man natürlich auch ohne Variable SIZE_KB machen, aber nach meinem persönlichen Geschmack wird's dann zu unübersichtlich.

Jochen
 

max



Anmeldungsdatum: 14.05.2000
Beiträge: 806
Wohnort: Ruhrpott

BeitragVerfasst am: 27. Jun 2003 12:21   Titel: Re: shell: Größenvergleich von Dateien

ein fehlendes Leerzeichen nach der [ (und vor der ])

Sonst interpretiert er das doch als ein Argument.
Hoffe geholfen zu haben
Max
 
Benutzer-Profile anzeigen Private Nachricht senden

rudi
Gast





BeitragVerfasst am: 27. Jun 2003 13:46   Titel: Re: shell: Größenvergleich von Dateien

Erstmal vielen Dank für eure Hilfe und in der Tat, den Dateinamen bei "du -k" hätte ich bemerken müssen.

Was nebensächlich ist, aber trotzdem ein Rätsel: wenn ich bei cut als Trennzeichen (-d) " " eingebe, klappt es nicht - vermutlich weil die Ausgabe ein TAB ist. Aber wie gebe ich cut einen TAB als Trennzeichen mit (z.B. cut aus ifconfig | grep inet klappt gar nicht).


P.S.: Ich hätte nicht gedacht, das grundlegende Fragen zur sh schon als programmieren gilt, werde es aber naürlich das nächste mal berücksichtigen.
 

Jochen
Gast





BeitragVerfasst am: 27. Jun 2003 14:49   Titel: Re: shell: Größenvergleich von Dateien

Tab als Trennzeichen ist der Default bei cut, daher -d einfach weglassen.

Bei ifconfig ist das Problem nicht Tab/Space, sondern viele Spaces! Jedes einzelne Space gilt als Trennzeichen. Wenn also eine Zeile durch 8 Spaces am Anfang eingerückt wird, ergibt erst ein
cut -d' ' -f 9
das erwünschte Ergebnis.

Man kann sich in so einem Fall mit "tr -s" und sed behelfen, aber einfacher ist es dann, awk zu verwenden:
awk '{print $1}'
gibt das erste Feld aus, mehrere Blanks & Tabs werden als ein einzelner Feldtrenner betrachtet.

Jochen
 

marcdevil
Gast





BeitragVerfasst am: 30. Jun 2003 12:55   Titel: Re: shell: Größenvergleich von Dateien

hallo, also wenns nur darum geht etwas mit dateien > 1000 bytes zu machen, dann geht das auch mit find.
find ./ -type f -size +1000c -exec something {} \;
 

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