Bash Script zum Archivieren von Aufnahmen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Bash Script zum Archivieren von Aufnahmen

      Hallo zusammen,

      ich möchte mir ein Script schreiben, das mir lokale Aufnahmen auf meine NAS auslagert.

      Allerdings scheinen einige Befehle, die ich sonst in Linux verwende, im VTi Image anders zu funktionieren :(

      z.B. funktionieren einfache String manipulationen wie:
      • ${string#substring}
      • ${string%substring}
      nicht wirklich. Es gibt immer folgende Fehlermeldung:

      $directories1=${$directories#$prefix}: bad substitution

      Auch funktioniert ein einfacher Loop durch Directories nicht:

      Shell-Script

      1. #!/bin/bash
      2. for d in $(find /media/hdd/serien/* -type d)
      3. do
      4. echo $d
      5. done
      Dabei wird immer "find " als erstes Directory und "-type d" als Letztes ausgegeben.

      Blöderweise habe ich im weiten Netz auch wenig zum Scripten auf der Box gefunden - daher hoffe ich jetzt mal hier Hilfe zu dem Thema zu bekommen.

      Danke schon mal für Eure Hilfe!
    • Hi,

      du könntest erst einmal anfangen uns zu sagen, welche Box, welches Image und welche Shell du hier benutzt; da gibt es schon Unterschiede...

      Mit der Bash funktioniert die Parameter-Substitution einwandfrei; "find" ist auf der Box normalerweise die Busybox-Variante, die nicht soviel kann wie ein ausgewachsenes echtes "find"; dein "Problem" scheint mir aber zu sein, dass du nicht die Bash als Shell benutzt.

      Gruß,
      Robert
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.
    • Hallo Robert,

      erst mal Danke für die Antwort!

      Eigentlich hatte ich den Beitrag in DUO2 / VTi Image gepostet - daher hatte ich angenommen, dass sich die Frage nach Box und Image damit erledigt hat :)

      Nachdem der Beitrag aber verschoben wurde, ich habe einen DUO2 mit dem VTi Image.

      Ansonsten packe ich mein Script in in eine .sh Datei, mach sie Ausführbar und starte das Script. Sollte eigentlich passen - oder?

      Schöne Grüße
      Stefan
    • Tja, wenn's verschoben wurde :)

      Eigentlich sollte es passen, ja; aber der Teufel und das Detail... - wie sieht die Shebang im Script aus? #!/bin/sh ? Und was wird ausgegeben, wenn du "ls -l /bin/sh" auf der Konsole eintippst? Bei mir ist das aus besagtem Grund ein Symlink auf /bin/bash. Kannst natürlich aus #!/bin/bash als Shebang benutzen.

      Gruß,
      Robert.

      PS: Du kannst natürlich auch dein Profil ausfüllen, das erspart das Fragen :)
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von rdamas ()

    • Hallo Robert,

      hab mal ein wenig das Profil ergänzt :)

      Hier mal das Script, was ich zum Testen ausführe:

      Shell-Script

      1. #!/bin/sh
      2. directories="find /media/hdd/serien/Numb3rs/* -type d"
      3. prefix="find "
      4. suffix=" -type d"
      5. echo $directories
      6. $directories1=${$directories#$prefix}
      7. $directories2=${$directories1%$suffix}
      8. echo $directories2
      9. for d in $directories
      10. do
      11. echo "Directory:"
      12. echo $d
      13. done
      Alles anzeigen

      Alternativ kann ich auch #!/bin/bash verwenden - als Ergebnis bekomme ich immer nur folgendes:


      Quellcode

      1. find /media/hdd/serien/Numb3rs/Season 05 /media/hdd/serien/Numb3rs/Season 06 -type d
      2. ./test.sh: line 11: $directories1=${$directories#$prefix}: bad substitution
      3. ./test.sh: line 12: $directories2=${$directories1%$suffix}: bad substitution
      4. Directory:
      5. find
      6. Directory:
      7. /media/hdd/serien/Numb3rs/Season 05
      8. Directory:
      9. /media/hdd/serien/Numb3rs/Season 06
      10. Directory:
      11. -type
      12. Directory:
      13. d
      Alles anzeigen

      Dass ich in der Schleife $directories und nicht $directories2 verwende liegt daran, dass $directories2 leer bleibt da die Substitutions nicht funktionieren.

      Noch eine Idee, was falsch ist??
    • ok, hier code und ausgabe:

      Shell-Script

      1. #!/bin/sh
      2. directories="find /media/hdd/serien/Numb3rs/* -type d"
      3. prefix="find "
      4. suffix=" -type d"
      5. echo $directories
      6. directories1=${$directories#$prefix}
      7. directories2=${$directories1%$suffix}
      8. echo $prefix
      9. echo $suffix
      10. echo $directories
      11. for d in $directories
      12. do
      13. echo "Directory:"
      14. echo $d
      15. done
      Alles anzeigen


      Quellcode

      1. find /media/hdd/serien/Numb3rs/Season 05 /media/hdd/serien/Numb3rs/Season 06 -type d
      2. ./test.sh: line 11: ${$directories#$prefix}: bad substitution
      3. ./test.sh: line 12: ${$directories1%$suffix}: bad substitution
      4. find
      5. -type d
      6. find /media/hdd/serien/Numb3rs/Season 05 /media/hdd/serien/Numb3rs/Season 06 -type d
      7. Directory:
      8. find
      9. Directory:
      10. /media/hdd/serien/Numb3rs/Season 05
      11. Directory:
      12. /media/hdd/serien/Numb3rs/Season 06
      13. Directory:
      14. -type
      15. Directory:
      16. d
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von litronics ()

    • Hi,

      wenn ich das richtig verstehe, willst du einfach


      Shell-Script

      1. directories="find /media/hdd/serien/Numb3rs/* -type d"
      2. for d in $(directories); do
      3. echo "Directory:" $d
      4. done
      ausführen. Vergiss dafür das mit der Parameter-Substitution, das funktioniert so nicht.

      Wenn, dann müsste das "directories1=${directories#$prefix}" heißen.

      Gruß,
      Robert
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.
    • Hallo Robert,

      so hatte ich das auch erst. Aber da kam dann folgendes raus:

      find
      directory1
      directory2
      -type d

      deswegen die substition um aus dem ergebnis die zwei Werte wegzuschneiden.

      Wie auch immer - ich hab's jetzt einfach in Python geschrieben und da funktioniert das script schon fast fehlerfrei :)

      Aber Danke für Deine Hilfe!

      Gruß
      Stefan
    • ${$directories#$prefix}: bad substitution
      Da ist ein "$" zu viel.

      So sollte es gehen:

      Quellcode

      1. directories1=${directories#$prefix}


      Aber wozu die ganze Stringmanipulation? Wenn ich das richtig verstehe, möchtest du so etwas:

      Quellcode

      1. #! /bin/sh
      2. directories="find /media/hdd/serien/Numb3rs/* -type d"
      3. for d in `$directories`; do
      4. echo "Directory: $d"
      5. done