[Gelöst] Linux Shell Script

  • Hallo !


    Ich habe ein kleines Problem :face_with_tongue: Ich möchte ein Script machen, dass automatisch in alle Unterordner von Ordner "xy" geht (unterordner Namen können variieren und sind von unbestimmter Menge), in diesen dann immer den Ordner "incomplete" löscht, all restlichen inhalt zum Ordner "ab" verschiebt und anschließend den Unterordner löscht. Dies wiederholt sich so lange, bis kein Unterordner mehr übrig ist.


    Wieso? Weil ich einen Linksys NSLU2 NAS Server besitze und Online Radio mithilfe meiner Dream aufnehme. Der Speichert jeden Radiosender in eigenem Unterordner. Ich möchte, dass mir der NAS Server dann per Cronjob zB Jede Woche Samstag um 12 Uhr alle Dateien in einen Ordner ohne jegliche Unterordner schiebt.


    So, dazu habe ich schonmal folgendes geschrieben (ungetestet!), allerdings fehlt mir etwas für den grep Befehl.


    Wie bekommt man mithilfe mit grep (oder auch irgendetwas komplett anderem) nur die erste Ausgegebene Zeile von "ls -1" in eine Variable?


    Hier mein bislang geschriebenes Script (ungetestet und wahrsch. noch mit Fehlern :P) :


  • line1=`ls -1 | sed '1!d'`

    ( I love my menu's :winking_face: )
    E1 Quicktip: Blue-Panel -> (5) Quickbutton Einstellungen ->Plugin nach Name -> Flexmenu 1.94 :]
    E2 Quicktip: edit /etc/quickbutton.xml add this into plugins section then Blue-Panel -> (3) Extras/Einstellungen -> Quickbutton ->Plugin nach Name -> Menu Fantastic;)

  • Zitat

    Originally posted by Kaktus621
    Wie bekommt man mithilfe mit grep (oder auch irgendetwas komplett anderem) nur die erste Ausgegebene Zeile von "ls -1" in eine Variable?

    Ich denke folgendes ist das was Du willst

    Code
    var="`ls -1 | head -1`"

    johnbock


    13.0/19.2
    NFS/QNAP TS-219P/debian - lenny
    NFS/eSATA SheevaPlug/emdebian (ubifs) - squeeze

  • johnbock
    viele Wege führen nach Rom :winking_face:
    edit: deine Variante ist fehlerfreier :winking_face:


    Kaktus621
    für dein Problem mit dem rekursiven Suchen und Verschieben,
    schon mal mit find probiert?

    ( I love my menu's :winking_face: )
    E1 Quicktip: Blue-Panel -> (5) Quickbutton Einstellungen ->Plugin nach Name -> Flexmenu 1.94 :]
    E2 Quicktip: edit /etc/quickbutton.xml add this into plugins section then Blue-Panel -> (3) Extras/Einstellungen -> Quickbutton ->Plugin nach Name -> Menu Fantastic;)

    Einmal editiert, zuletzt von barabas ()

  • wie heissen den die Dateien?
    Evt. lässt sich's am Dateiname festmachen (z.b. mp3) dann so vielleicht:


    cd $QUELLE
    find . -name '*.mp3' -exec mv \{\} $ZIEL \;


    fürs löschen mal selber basteln :winking_face:

    ( I love my menu's :winking_face: )
    E1 Quicktip: Blue-Panel -> (5) Quickbutton Einstellungen ->Plugin nach Name -> Flexmenu 1.94 :]
    E2 Quicktip: edit /etc/quickbutton.xml add this into plugins section then Blue-Panel -> (3) Extras/Einstellungen -> Quickbutton ->Plugin nach Name -> Menu Fantastic;)

  • Wenn Du ein gnu find hast

    Code
    find . -maxdepth 1 <suche> |
    while read line ; do
       <what you want>
       <ruf mich wieder auf>
    done

    Diese Art die Verarbeitung bilde ich immer in einer Funktion ab, die sich selbst wieder aufruft.

    johnbock


    13.0/19.2
    NFS/QNAP TS-219P/debian - lenny
    NFS/eSATA SheevaPlug/emdebian (ubifs) - squeeze

  • Zitat

    Originally posted by barabas
    cd $QUELLE
    find . -name '*.mp3' -exec mv \{\} $ZIEL \;

    Da duerfen nur Datien und keine Pfade an geben. Und die geschweifte klammern muessen normaler Weise nicht esc'ed werden.

    johnbock


    13.0/19.2
    NFS/QNAP TS-219P/debian - lenny
    NFS/eSATA SheevaPlug/emdebian (ubifs) - squeeze

  • hehe, danke :winking_face:

    ( I love my menu's :winking_face: )
    E1 Quicktip: Blue-Panel -> (5) Quickbutton Einstellungen ->Plugin nach Name -> Flexmenu 1.94 :]
    E2 Quicktip: edit /etc/quickbutton.xml add this into plugins section then Blue-Panel -> (3) Extras/Einstellungen -> Quickbutton ->Plugin nach Name -> Menu Fantastic;)

  • Wow so viele Antworten :grinning_face_with_smiling_eyes: Also den Befehl find hatte ich auch, aber macht doch eigentlich keinen großen Unterschiede wenn ich es mit ls -1 mache (zumindest bei dem Code den ich da oben produziert habe ^^). Aufjedenfall danke dafür :) Ich werds gleich mal mit der sed Methode probieren.

  • dann vergess die Gänsefüsschen nicht :winking_face:


    ORDNER="`ls -1 | sed '1!d'`"

    ( I love my menu's :winking_face: )
    E1 Quicktip: Blue-Panel -> (5) Quickbutton Einstellungen ->Plugin nach Name -> Flexmenu 1.94 :]
    E2 Quicktip: edit /etc/quickbutton.xml add this into plugins section then Blue-Panel -> (3) Extras/Einstellungen -> Quickbutton ->Plugin nach Name -> Menu Fantastic;)

  • Okay habs jetzt so gemacht, ich bekomme allerdings immer noch eine einzige Fehlermeldung wenn ich es ausführen will :


    Quellcode :


    Meldung:

    Code
    16: Syntax error: "done" unexpected (expecting "fi")


    Das "fi" für die "if" Anweisung steht doch schon da (Zeile 15). Ich werd nicht so ganz schlau aus der Meldung

  • Ich bin der Meinung es muesste

    Code
    while [ 0 -ne $WEITER ]

    und

    Code
    if [ -z "$ORDNER" ]

    heissen.

    johnbock


    13.0/19.2
    NFS/QNAP TS-219P/debian - lenny
    NFS/eSATA SheevaPlug/emdebian (ubifs) - squeeze

    Einmal editiert, zuletzt von johnbock ()

  • Fuehre

    Code
    set -x

    dann Deinen Script und

    Code
    set +x

    . Dann alles inklusiv Aufrufe hier posten.

    johnbock


    13.0/19.2
    NFS/QNAP TS-219P/debian - lenny
    NFS/eSATA SheevaPlug/emdebian (ubifs) - squeeze

  • Edit: meinen Müll wieder gelöscht :face_with_rolling_eyes:



    Also ich bin ja immer noch für die find methode :winking_face:

    ( I love my menu's :winking_face: )
    E1 Quicktip: Blue-Panel -> (5) Quickbutton Einstellungen ->Plugin nach Name -> Flexmenu 1.94 :]
    E2 Quicktip: edit /etc/quickbutton.xml add this into plugins section then Blue-Panel -> (3) Extras/Einstellungen -> Quickbutton ->Plugin nach Name -> Menu Fantastic;)

    2 Mal editiert, zuletzt von barabas ()

  • Das sollte ( nur mal von der Syntax her) funktionieren:



    Was ls -1 | head -1 da ausgibt muss aber nicht zangsläufig ein Ordner sein:

    Code
    ORDNER="`ls -1 | head -1`"

    ( I love my menu's :winking_face: )
    E1 Quicktip: Blue-Panel -> (5) Quickbutton Einstellungen ->Plugin nach Name -> Flexmenu 1.94 :]
    E2 Quicktip: edit /etc/quickbutton.xml add this into plugins section then Blue-Panel -> (3) Extras/Einstellungen -> Quickbutton ->Plugin nach Name -> Menu Fantastic;)

    Einmal editiert, zuletzt von barabas ()

  • Wenn nur Ordner erwuenscht sind

    Code
    ORDNER="`find . -type d -maxdepth 1 | head -1`"

    johnbock


    13.0/19.2
    NFS/QNAP TS-219P/debian - lenny
    NFS/eSATA SheevaPlug/emdebian (ubifs) - squeeze

  • Zitat

    Original von Peq
    [...]
    Dann sollte doch sowas hier gehen:


    Code
    rm -rf xy/*/incomplete
    mv xy/*/* ./zzz
    rm -rf xy/*


    cu,
    Peq


    So ist es, mir war bishin nicht bewusst, dass man das Sternchen auch inmitten des Pfades setzen kann. Das würde die Sache natürlich um einiges vereinfachen :winking_face: Ich werd gleich mal alle Lösungsvorschläge testen. Dankeschön!


    EDIT:


    @ barabas:


    Bei deinem Quellcode bekomme ich folgende Ausgabe :

    Code
    # sh /scripts/musik.sh
    set: Illegal option -
    + QUELLE=/share/hdd/data/dream/music/
    + ZIEL=/share/hdd/data/musik/
    + WEITER=1
    ++ head -1
     ls -1
    + ORDNER=
    /scripts/musik.sh: 17: Syntax error: "done" unexpected (expecting "fi")


    @ Peq:


    Verschoben hat er es, aber die Unterordner "incomplete" wurden nicht gelöscht.


    EDIT2:


    @ barabas:


    Dein find Befehl funktioniert nicht ganz :winking_face: Find zeigt leider auch die "Ordner" "." und ".." an. Sieh selbst :face_with_tongue:


    Code
    # ls -1 | head -1
    Test
    # find . -type d -maxdepth 1 | head -1
    .
    #