Rekursives Auslesen über 2 Ebenen und Ausführen von mehreren Befehlen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von tihnk, 12.07.2010.

  1. #1 tihnk, 12.07.2010
    Zuletzt bearbeitet: 12.07.2010
    tihnk

    tihnk Mausschubser

    Dabei seit:
    12.07.2010
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo zusammen,
    mein Ziel ist das rekursive Auslesen von 2 Verzeichnisebenen und das ausführen von Befehlen auf den vorhandenen Dateien. Konkret handelt es sich um Videos im avi-Format, die ich zunächst in einzelne jpgs zerlegen muss um sie dann in einem zweiten Schritt einem Programm zuzuführen, das seinerseits txt-Files erstellt.

    Ich verwende Ubuntu 8.04/bash 3.2.39.

    Die Dateien liegen unter /home/user/Desktop/ in den Verzeichnissen v14 und v15.

    Mit Hilfe von
    Code:
    mogrify -format jpg ./v15/40-40/v15_40-40_03.avi
    kann ich die einzelnen Dateien zerlegen.

    Mit
    Code:
    find . -name *.avi
    kann ich mir die Dateien anschauen. Nun hab ich etwas gegoogelt, und der erste Schritt wäre nun, die Dateien via find und mogrify zu bearbeiten, in etwa so
    Code:
     find . -name *.avi -exec "mogrify -format jpg {}" \;
    Leider bekomme ich ein
    Code:
    find: mogrify -format jpg ./Desktop/v15/40-40/v15_40-40_03.avi: No such file or directory
    als Antwort. Was ist in dem Script nun nicht ganz richtig? ?(

    Außerdem wäre mein Wunsch, dass die jpgs in (zu erstellende) Verzeichnisse gelegt werden, also z.B. in v15/40-40/03 (für Datei 03).

    Und dann schließlich als letztes das ausführen des Programms auf den einzelnen jpgs mit Ausgabe einer txt.

    Kann ich das alles in "exec" integrieren..? Wäre für Tipps sehr dankbar!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 HeadCrash, 12.07.2010
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Abend,

    versuchs mal mit
    Code:
     find . -name *.avi -exec mogrify -format jpg '{}' \;
    
    Durch die Anführugnszeichen um das mogrify will er wirklich die Datei "mogrify -format jpg ./Desktop/v15/40-40/v15_40-40_03.avi" ausführen.

    mfg
    HeadCrash
     
  4. tihnk

    tihnk Mausschubser

    Dabei seit:
    12.07.2010
    Beiträge:
    4
    Zustimmungen:
    0
    Mhm... so einfach kann es manchmal sein... Danke dir soweit! :)

    Bleibt das Problem mit den Verzeichnissen. Ist folgender Ansatz erfolgsversprechend? Ich werde versuchen, auf jeden Treffer von find ein Script laufen zu lassen, das mir das macht was ich will...
     
  5. #4 bytepool, 12.07.2010
    Zuletzt bearbeitet: 12.07.2010
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ausserdem solltest du zur Sicherheit das Suchmuster nochmal quoten:
    Code:
    find . -name '*.avi' -exec mogrify -format jpg '{}' \;
    
    Das Asterisk (*) wird von der Shell ausgewertet, bevor es an find uebergeben wird. D.h. wenn es in dem Verzeichnis in dem du dich gerade befindest Dateien gibt, die *.avi matchen, dann wird *.avi entsprechend ersetzt.

    Wenn du mehr als ein simples Kommando ausfuehren willst, solltest du das besser in einer Schleife machen, als zu versuchen das in eine einzelne exec Anweisung zu stopfen.

    So in diese Richtung:
    Code:
    find . -name '*' | while read line; do 
      echo $line
    done
    
    Die Alternative waere, wo du ja selbst schon drauf gekommen bist, noch ein zweites Skript zu schreiben. Aber das ist eigentlich unnoetig unuebersichtlich.

    Den Satz verstehe ich nicht.

    mfg,
    bytepool
     
  6. tihnk

    tihnk Mausschubser

    Dabei seit:
    12.07.2010
    Beiträge:
    4
    Zustimmungen:
    0
    Ok, danke. PHP find ich echt super easy gegenüber bash scripting... :D

    Ok danke, ich denke, den Ansatz werde ich versuchen.

    Na, erst finden > jpgs extrahieren > Verzeichnis erstellen > Bilder auswerten > Ergebnisse in Verzeichnisse schreiben (txt, neues jpg).
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 bytepool, 12.07.2010
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,
    Die Aussage finde ich immer noch recht verwirrend, aber ich hab deinen ersten Post nochmal ganz gelesen, und ich glaube jetzt verstanden zu haben was du meinst. ;)
    Du bezogst dich implizit auf eine Aussage direkt am Anfang. Ich hatte nicht verstanden was denn jetzt Textdateien damit zu tun haben, aber du hast noch ein weiteres Zerstueckelungsprogramm das dir Textdateien liefert, wenn ich das jetzt richtig verstanden hab.

    Zum weiterverarbeiten der Variablen helfen dir wahrscheinlich "dirname", "basename" und parameter expansion.

    mfg,
    bytepool
     
  9. #7 tihnk, 12.07.2010
    Zuletzt bearbeitet: 12.07.2010
    tihnk

    tihnk Mausschubser

    Dabei seit:
    12.07.2010
    Beiträge:
    4
    Zustimmungen:
    0
    Ja, danke! :) Ich bastel mal...

    Code:
    find . -name '*.avi' | while read line; do
      echo $line
      filedir="$(dirname "$line")"
      filename="$(basename "$line" .avi)"
    
      # Verzeichnis erstellen
      if [ -d $filedir/$filename ];
      then
         echo "Verzeichnis $filedir/$filename existiert."
      else
         mkdir $filedir/$filename
      fi
    
      # Mogrify starten
      mogrify -format jpg -path $filedir/$filename $line
    
      # Tool starten
    
    
    done
    
     
Thema:

Rekursives Auslesen über 2 Ebenen und Ausführen von mehreren Befehlen

Die Seite wird geladen...

Rekursives Auslesen über 2 Ebenen und Ausführen von mehreren Befehlen - Ähnliche Themen

  1. Rekursives Ändern einer bestimmten Dateiendung

    Rekursives Ändern einer bestimmten Dateiendung: Hallo Leute, ich habe meine Musiksammelung komplett im Ogg-Vorbis-Format gespeichert. Seit neustem neigen aber alle möglichen Programme dazu,...
  2. Rekursives CHMOD, aber...

    Rekursives CHMOD, aber...: Hallo, ich habe einen blöden Fehler gemacht: Ich habe aus versehen per rekursivem CHMOD es geschaftt, alles in meinem Heimatordner auf das...
  3. 2 Zeilen aus einer txt auslesen

    2 Zeilen aus einer txt auslesen: Hallo Leute, ich habe eine Datei die immer aus zwei zusammenhängenden Zeilen besteht, als Beispiel: DE0006231004 # 15,04 Infineon DE0005785604...
  4. Teil einer Variablen auslesen und in neue Variable schreiben

    Teil einer Variablen auslesen und in neue Variable schreiben: Hallo, ist für Euch bestimmt ganz einfach, aber trotz googlen komme ich nicht auf eine Lösung. In Variable x habe ich stehen: xy,ab Nun möchte...
  5. Datei auslesen und fund per MAil versenden.

    Datei auslesen und fund per MAil versenden.: Hallo folgendes Script habe ich zur Zeit in Arbeit. Und zwar führe ich über "at" ein kleines Script aus was in einem Logfile nach bestimmten...