Anzeige:
Ergebnis 1 bis 7 von 7

Thema: files per script umbennen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.10.2001
    Beiträge
    46

    files per script umbennen?

    Hallo Leute,
    würde gerne mehrere files umbenennen. Leider läuft mein script im Moment noch auf einen Fehler.

    Hier mehr Details - umbenennen von files:
    Nachname_Vorname_12343_1500.mp4
    Nachname_Vorname_12a_1500.mp4
    Nachname_Vorname_34gfgtg67_1500.mp4
    Nachname_Vorname_45tgh56_1500.mp4

    nach:
    12343.mp4
    12a.mp4
    34gfgtg67.mp4
    45tgh56.mp4

    Hier mein script:
    #!/bin/sh
    for i in Nachname_Vorname_*.mp4; do mv "$i" "${i#Nachname_Vorname_}"; done
    for i in *_1500.mp4; do mv "$i" "${i/_1500.mp4}".mp4; done
    exit 0
    Also wenn ich die Kommandos separate in der shell ausführe, erhalte ich das erwünschte Ergebnis. Wenn ich jedoch das ganze script ablaufen lassen, passiert folgendes:

    linux$ ./script.sh
    ./script.sh: 4: Bad substitution
    linux$ ls -l
    insgesamt 4
    -rw-r--r-- 1 linux linux 0 2011-02-05 22:10 12343_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-05 22:11 12a_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-05 22:11 34gfgtg67_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-05 22:11 45tgh56_1500.mp4

    Bin dankbar für jeden Tip.
    Geändert von hmikux (05-02-2011 um 21:28 Uhr)
    Gruß hmikux aus Hessen
    Zenwalk
    CPU: AMD K7 1600+XP / 512MB DDR-RAM / NVIDIA-GF2-MX-Chip

  2. #2
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Warum nimmst du nicht rename? Mit der Option -n kannst du das Verhalten simulieren, sollte aber so richtig sein:
    Code:
    rename 's/(Vorname_Nachname_)?(.+)(_1500).mp4/$2.mp4/' Vorname_Nachname_*.mp4

  3. #3
    Registrierter Benutzer
    Registriert seit
    04.10.2001
    Beiträge
    46
    Hi John W,

    Befehl rename steht mir leider nicht zur Verfügung. Das script soll auf einer RouterPlatform mit OpenWrt laufen. Dort ist busybox-sh installiert und die Kommandos sind doch etwas limitiert.
    Gruß hmikux aus Hessen
    Zenwalk
    CPU: AMD K7 1600+XP / 512MB DDR-RAM / NVIDIA-GF2-MX-Chip

  4. #4
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Das könnte knifflig werden, weil du keine Bash hast - ich hätte dann noch 2 Alternativen, einmal mit sed und einmal mit awk:
    Code:
    for i in Nachname_Vorname_*.mp4; do mv "$i" "`echo "$i" | sed -r 's#(Nachname_Vorname_)?(.+)(_1500)?.mp4#\2.mp4#'`"; done
    Code:
    for i in Nachname_Vorname_*.mp4; do mv "$i" "`echo "$i" | awk '{print gensub(/^Nachname_Vorname_/, "", "g", gensub(/_1500.mp4$/, ".mp4", "g"))}'`"; done

  5. #5
    Registrierter Benutzer
    Registriert seit
    04.10.2001
    Beiträge
    46
    John W,
    danke fuer deine Hilfe. Die awk Variante funktioniert nicht:

    linux$ ls -l
    insgesamt 4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_12343_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_12a_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_34gfgtg67_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_45tgh56_1500.mp4

    linux$ for i in Nachname_Vorname_*.mp4; do mv "$i" "`echo "$i" | awk '{print gensub(/^Nachname_Vorname_/, "", "g", gensub(/_1500.mp4$/, ".mp4", "g"))}'`"; done

    awk: line 2: function gensub never defined
    awk: line 2: function gensub never defined
    mv: Verschieben von „Nachname_Vorname_12343_1500.mp4“ nach „“ nicht möglich: No such file or directory
    awk: line 2: function gensub never defined
    awk: line 2: function gensub never defined
    mv: Verschieben von „Nachname_Vorname_12a_1500.mp4“ nach „“ nicht möglich: No such file or directory
    awk: line 2: function gensub never defined
    awk: line 2: function gensub never defined
    mv: Verschieben von „Nachname_Vorname_34gfgtg67_1500.mp4“ nach „“ nicht möglich: No such file or directory
    awk: line 2: function gensub never defined
    awk: line 2: function gensub never defined
    mv: Verschieben von „Nachname_Vorname_45tgh56_1500.mp4“ nach „“ nicht möglich: No such file or directory


    Die sed Variante sieht besser aus, aber noch nicht ganz das, was ich als Endresultat wollte:

    linux$ ls -l
    insgesamt 4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_12343_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_12a_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_34gfgtg67_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_45tgh56_1500.mp4

    linux$ for i in Nachname_Vorname_*.mp4; do mv "$i" "`echo "$i" | sed -r 's#(Nachname_Vorname_)?(.+)(_1500)?.mp4#\2.mp4#'`" ; done

    linux$ ls -l
    insgesamt 4
    -rw-r--r-- 1 hrvoje hrvoje 0 2011-02-05 22:21 12343_1500.mp4
    -rw-r--r-- 1 hrvoje hrvoje 0 2011-02-05 22:21 12a_1500.mp4
    -rw-r--r-- 1 hrvoje hrvoje 0 2011-02-05 22:21 34gfgtg67_1500.mp4
    -rw-r--r-- 1 hrvoje hrvoje 0 2011-02-05 22:21 45tgh56_1500.mp4

    Ich haette auch gerne das '_1500' aus dem filenamen gelöscht. Werde mich noch mal bei den manpages von sed umschauen.

    Aber wenn ich ehrlich bin, sieht doch die von mir erstgenannte Variante einfacher aus. Es gibt mal wieder verschiedene Wege zum Ziel.

    Danke & Schönen Abend noch.
    Gruß hmikux aus Hessen
    Zenwalk
    CPU: AMD K7 1600+XP / 512MB DDR-RAM / NVIDIA-GF2-MX-Chip

  6. #6
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Mein Fehler, sed ist gerne "gierig":
    Code:
    for i in Nachname_Vorname_*.mp4; do mv "$i" "`echo "$i" | sed -r 's#(Nachname_Vorname_)?(.+)_1500.mp4#\2.mp4#'`"; done
    Damit ist der _1500-Teil nicht mehr optional, sondern muss vorhanden sein, damit etwas ersetzt wird.

  7. #7
    Registrierter Benutzer
    Registriert seit
    04.10.2001
    Beiträge
    46
    Hey. Super. Hat funktioniert.

    linux$ ls -l
    insgesamt 4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_12343_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_12a_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_34gfgtg67_1500.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 Nachname_Vorname_45tgh56_1500.mp4

    linux$ for i in Nachname_Vorname_*.mp4; do mv "$i" "`echo "$i" | sed -r 's#(Nachname_Vorname_)?(.+)_1500.mp4#\2.mp4#'`"; done

    linux$ ls -l
    insgesamt 4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 12343.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 12a.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 34gfgtg67.mp4
    -rw-r--r-- 1 linux linux 0 2011-02-06 20:15 45tgh56.mp4

    Werde dies so in mein script einbauen!

    VIELEN DANK!
    Gruß hmikux aus Hessen
    Zenwalk
    CPU: AMD K7 1600+XP / 512MB DDR-RAM / NVIDIA-GF2-MX-Chip

Lesezeichen

Berechtigungen

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