Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Shellskript Abfrage Datei vorhanden und Dateigröße

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219

    Shellskript Abfrage Datei vorhanden und Dateigröße

    Hallo,
    ich habe folgendes Shellskript.
    Code:
    for i in `seq 100 200`
    !#/bin/sh
    do 
      if test -f /daten05/maltec/input_files_mc/2338/EC_2338_DOY_$i.nc;
      then
       echo File EC_2338_DOY_$i.nc existiert bereits
      else
       csi2ncdf -i /daten05/maltec/ts_data/2338/EC_2338_DOY_$i.csv -l -1 -n toa5 | csi2ncdf -i - -t ssv -a -f config_flux_ec.con -o /daten05/maltec/input_files_mc/2338/EC_2338_DOY_$i.nc
       echo File EC_2338_DOY_$i.nc geschrieben
      fi
    done
    Es fragt ab ob eine Datei vorhanden ist, und falls die Datei nicht vorhanden ist erstellt es diese Datei neu. Soweit funktioniert auch alles.
    Ich würde jetzt diese Ziele
    Code:
      if test -f /daten05/maltec/input_files_mc/2338/EC_2338_DOY_$i.nc;
    gerne so verändern das er nicht nur prüft, ob die Datei vorhanden ist, sondern auch prüft ob sie größer als 1064 byte ist.

    Ist das irgendwie einfach realisierbar?

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    ja ist realisierbar! dateigrößen kannst du zB mit du -k erfahren.

  3. #3
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219
    Kann ich auch verschiedenen Abfragen über "und" "oder" usw verknüpfen?
    Kann ich nur nach expliziten größen Fragen, oder geht auch sowas wie größer, kleiner?

  4. #4
    Registrierter Benutzer
    Registriert seit
    20.03.2006
    Beiträge
    180
    Code:
    gerne so verändern das er nicht nur prüft, ob die Datei vorhanden ist, sondern auch prüft ob sie größer als 1064 byte ist.
    
    Ist das irgendwie einfach realisierbar?
    Mit Linux/Unix ist alles machbar. Wie bereits MSI (MicroSoft??) erwähnte, ist "du -k" ein Lösungsansatz, allerdings ein erster. Dein Wunsch ist, jede beliebige Dateigröße abzufragen. Der Befehl "du -k" rundet nach kBytes.

    Um beispielsweise abzufragen, ob eine Datei größer, kleiner oder genau 1064 Bytes hat, würde ich wie folgt vorgehen:

    1. Speichern der Ausgabe von "ls -l datei" in einer Variablen und gleichzeitig die Dateigröße herauslösen (mit "cut" und/oder "sed")
    2. Übergabe des gefundenen Wertes an "awk", der mit zwei Parametern gefüttert wird. Der eine Parameter ist die gefundene Dateigröße, der andere der vorgegebene Richtwert (z.B 1064 Bytes).
    3. "awk" liefert einen von genau drei benutzerdefinierten Werten zurück, die für "kleiner", "genau", und "größer" bzgl. Dateigröße stehen.
    4. Abfragen des von "awk" zurückgelieferten Wertes" für die weitere Verarbeitung.

    Da ich am Arbeitsplatz mit Windoze arbeiten muss ("*wein*"), kann ich erst heute abend (evtl. spät abend) Dir eine ausgearbeitete Lösung anbieten.

    Gruss
    Dieter

    PS:
    Statt (ausführlich) "if test ..." zu schreiben, würde ich kürzer schreiben:

    if [ -f datei ] ; then
    statement-true
    else
    statement-false
    fi


    Du kannst natürlich in einer "if"-Abfrage mehrere Bedingungen abfragen:
    if [ -f datei 1 -a -d verzeichnis ] ; then (für "AND")
    if [ -f datei 1 -o -d verzeichnis ] ; then (für "OR")

    Die langen Zwischenräume dienen nur der optischen Abgrenzung.
    Du kannst auch andere Kriterien in "if" angeben.

  5. #5
    Registrierter Benutzer
    Registriert seit
    12.11.2008
    Beiträge
    219
    Halllo,

    danke für die ausführliche Antwort.
    Ich habe mir mittlerweile was zusammen gebastelt, dass ich erst wie hier beschrieben abfrage ob die Datei existiert und dann per Awk die Größe auslese und die noch mal mit einer Bedingung Abfrage ob sie kleiner als meine Grenzgröße ist.

    Das geht aber bestimmt auch eleganter. Ich werde morgen wenn ich auf der Arbeit bin mal meine Lösung hier reinposten.

    Wie das geht mehrere Abfrage mit "und" oder "oder" zu kombinieren bin ich noch nicht hintergestiegen. Das muss ich auch noch mal rausbekommen.

    Gruß Malte

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.03.2006
    Beiträge
    180
    Code:
    Wie das geht mehrere Abfrage mit "und" oder "oder" zu kombinieren bin ich noch nicht hintergestiegen. Das muss ich auch noch mal rausbekommen.
    Wie bereits skizziert:

    if [ bedingung1 -a bedingung2 -a bedingung3 ] ; then (für z.B. 3 Bedingungen, die mit AND verknüpdt sind.

    if [ bedingung1 -o bedingung2 ] ; then (für z.B. 2 Bedingungen, die mit OR verknüpft sind)

    Für bedingung1, bedungung2, usw setzt Du jeweils eine beliebige syntaktisch korrekte Bedingung ein (aus Auswahlliste (Auszug)):

    -f ${DATEI}: ist Datei ${DATEI} vorhanden
    -s ${DATEI}: ist Datei ${DATEI} vorhanden UND hat eine Größe von mindestens einem (1) Byte
    -d ${VERZ}: ist Verzeichnis ${VERZ} vorhanden
    ${ZAEHLER} -eq 14: Ist der Wert der Variablen ${ZAEHLER} genau 14
    ${ZAEHLER} -lt ${MAX_ABC}: Ist der Wert Variablen ${ZAEHLER} kleiner als der Wert der Variablen ${MAX_ABC}

    Man kann auch Negationen testen, das geschieht bei "-f" und "-d" mit vorangestelltem Ausrufezeichen:
    ! -f ${DATEI}
    ! -d ${VERZ}

    Mit diesem Lego-Baukasten bauen wir nun eine (i.a. nicht sinnvolle) Mehrfachbedingung:

    if [ ! -d ${MYFILE} -a ${LOOP_COUNT} -gt ${MAX_LOOP_COUNT} ] ; then

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •