1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Wir danken allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben.

dateinamen umbenennen (viele)

Dieses Thema im Forum "Software" wurde erstellt von mordor, 8. März 2004.

  1. vf47

    vf47 New Member

    Hier ein C-Shell Script zum Umbenennen von Dateien:


    Einfach ausschneiden, unter dem Name "replace" speichern und dann im Terminal chmod +x Dateiname eingeben.

    ----- Ab hier kopieren
    #!/bin/csh
    # Volker Funke, BRAINBOW EDV-Beratung GmbH
    # Dieses Script benennt Dateien um. Das searchPattern wird durch das replacement
    # ersetzt. Wird der Schalter -g weggelassen, so macht das Programm nichts, es
    # zeigt lediglich an, was es tun würde.
    # Das Programm ist zur freien Benutzung.
    #
    # JEGLICHE HAFTUNG ODER GARANTIE IST AUSDRUECKLICH AUSGESCHLOSSEN!
    # DIE BENUTZUNG GESCHIEHT AUF EIGENE GEFAHR!
    # AUSDRÜCKLICH WIRD NICHT FÜR VERLORENGEGANGENE DATEIEN GEHAFTET!
    #
    # Beispiel:
    # replace -g -s Anna -r Otto *.jpeg
    # Benennt alle Dateien vom Type "abcAnnaxyz.jpg" nach "abcOttoxyz.jpg"
    #
    # replace -g -s ".mpg" *.mpg
    # Entfernt die Endung .mpg von alle Dateien, die mit .mpg enden.
    #
    # replace -g -s "$" -r .jpg A*
    # Hängt an alle Dateien, die mit A beginnen, die Endung .jpg an
    #
    # Wird jeweils die Option -g weggelassen, so zeigt das Programm lediglich,
    # was es tun würde, es läßt aber die Dateien unverändert.
    #


    set usageString = "Usage: $0 [-g] -s searchPattern -r replacement files"

    set args=`getopt gs:p:r:e: $*`
    if ( $status != 0 ) then
    echo "${usageString}"
    exit 1
    endif

    set searchPattern
    set substitute
    set extension
    set lastOption = "-"
    set go
    set replaceSet

    foreach opt ( $args )
    shift args
    switch( $opt )
    case "-g":
    set go = "1"
    set lastOption = "-"
    breaksw
    case "-e":
    case "-s":
    set lastOption=$opt
    breaksw
    case "-r":
    set lastOption=$opt
    set replaceSet = "1"
    breaksw
    case "--"
    break
    default:
    switch( $lastOption )
    case "-e":
    set extension = $opt
    breaksw
    case "-s":
    set searchPattern = $opt
    breaksw
    case "-r":
    set substitute = $opt
    breaksw
    endsw
    endsw
    end

    set files = "$args"

    if ( $searchPattern == "" ) then
    echo "Missing -p option"
    echo "$usageString"
    exit 2
    endif

    if ( $substitute == "" && $replaceSet == "1" ) then
    echo "Missing -r option"
    echo "$usageString"
    exit 3
    endif



    foreach file ( $files )
    set newfile = `echo $file | sed -e "s/${searchPattern}/${substitute}/"`
    if( $go == "1" ) then
    echo "renaming $file to $newfile"
    mv $file $newfile
    else
    echo "I would rename $file to $newfile"
    endif
    end

    --- bis ausschließlich hier kopieren
    und dann beispielsweise in den TextEdit kopieren und speichern
     
  2. DieterBo

    DieterBo New Member

    ist ja wie bei DOS 1.0
     
  3. vf47

    vf47 New Member

    Nein, nicht ganz.

    Die unter Mac OS X zur Verfügung stehenden Scriptsprachen wie sh, bash, csh, tcsh sind äußerst leistungsstarke, auf jedem Unix-System installierte, Werkzeuge. Unter Windows gibt es bis heute keine brauchbare Scriptsprache.

    Also mit anderen Worten: Dieses Script läuft natürlich auch unter Linux, oder auf einer Sun-Workstation mit Solaris oder ...
     
  4. Macci

    Macci ausgewandert.

    Was mach ich, wenn ich einen Ordner mit
    2.jpg
    3.jpg
    4.jpg
    .
    .
    .
    habe und alle Numerierungen um eine Zahl abwärts/aufwärts ändern will?
     
  5. DieterBo

    DieterBo New Member

    nein, ich meine nicht die Sprache, nur die vorgehensweise so mit befehlen und Programiersprache u.s.w.
    War ja auch nicht verächtlich gemeint.
    Ich würde ja gerne einen ordner mit Files und ein kleines programm der dann die files umbenant in den anderen ordner legt oder so ähnlich :embar:
     
  6. vf47

    vf47 New Member

    Mit diesem Script geht das nicht. Das Script benennt einfach nur um. Bei Deinem Problem muss ein bisschen Arithmetik benutzt werden und die Dateien müssten temporär umbenannt werden, da die Zielnamen sonst die Quellnamen überschreiben.
    Alternativ könnte man natürlich als Ziel einen neuen leeren Ordner angeben.

    Ich überlege mal, ob ich so ein Script noch schreibe. Vorausgesetzt, Du kannst es wirklich brauchen. Allerdings nicht heute, ich muss noch was arbeiten. :D
     
  7. Macci

    Macci ausgewandert.

    Ja, brauch ich wirklich, da wir hier solche Dateien haben und wenn eine Buchseite doppelt gescannt wurde, oder vergessen, dann muß ich hunderte von Dateien genau so ändern.
    Bittebittebitte...muß nicht heute sein, aber bis demnächst mal...

    Dankedankedanke!
     
  8. hannibal

    hannibal New Member

    @macci

    aber sowas kannste nun doch locker mit GC machen. Einfach den Startindex auf die entsprechende Zahl setzen.
     
  9. vf47

    vf47 New Member

    Toll, aber was ist GC?
     
  10. hannibal

    hannibal New Member

    GrafikConverter
     
  11. vf47

    vf47 New Member

    Danke.

    Aber kann der auch beliebige Dateien numerieren oder umbenennen. Ich dachte, das funktioniert nur mit den gängigen Grafikformaten.
     
  12. hannibal

    hannibal New Member

    nein nein Du kannst damit alles was einen Namen hat umbenennen. Probiers doch einfach mal aus.
    Das Fenster für Mehrfachkonvertierung öffnen.
    Beim Popup untern "Alle Dateien erkennen" o.ä. auswählen, dann erkennt er eben alle Dateien.
    Den richtigen Ordner wähelen und öffen und die Dateien markieren, die Du umbennen willst.
    Umbenennen klicken und im folgenden Dialog die richtigen Optionen wählen.

    Nach ein paarmal probieren sollte es einfach gehen.
    Hat allerdings eine ganze Menge Optionen und es dauert ein wenig bis das locker und richtig geht.
     
  13. zwoelf11_

    zwoelf11_ New Member

    fall nur genau ein "." drin vorkommt (also "55.zip.bak" wird mist ergeben...), kannst du das so machen:

    Code:
    ls * | sort -r | awk -F "." '{print "mv " $0 " " ($1[color=red]+1[/color]) "." $2;}'[color=green] | /bin/sh[/color]
    
    den roten teil passt du entsprechend deiner bedürfnisse an, wenn es jedoch weniger werden soll (also zB 3.jpg => 2.jpg) musst du am anfang die "sort -r" passage weglassen.

    den grünen teil nur anfügen, wenn alles so seine richtigkeit hat
     
  14. Macci

    Macci ausgewandert.

    mit GC geht eben das nicht, da kann ich nur einen Index hinzufügen, oder ändern, aber nicht eine Zählung ändern...

    Das Script muß ich mal probieren...
     
  15. vf47

    vf47 New Member

    Das geht aber nur, wenn die Dateinamen reine Zahlen enthalten, also typische Digitalkameradateien der Form DSC_4711.jpg werden damit nicht neu numeriert, oder?
     
  16. Macci

    Macci ausgewandert.

    Das Script ergibt als Resultat statt mehrerer Dateien eine einzige mit dem Namen 1.jpg

    ;(

    Unsere Dateien heissen immer etwa so:
    405794150_0001.jpg
     
  17. hannibal

    hannibal New Member

    also bei Deinem Beispiel (?)

    1.jpg
    2.jpg
    etc

    sollte das schon gehen.
    GC erkennt das als Index.
    Wenn allerdings noch andere Zeichen in dem Namen vorhanden sind, dann hast Du recht.
    man kann natürlich den Namen auch so lassen und einen Index hinzufügen, dann sind die Datien auch in der richtigen Reihenfolge, allerdings sollte an dann immer auch fürhrende Nullen verwenden.

    Mit FileBuddy sollte es auch gehen, dort ist sowohl ein Suchen und Ersetztenn vorgesehen, als auch eine Indexumbenennung.

    Vielleicht kannst Du ja mal ein Beispiel posten. Ich habe schon eine ganze Menge mit Umbenennen zu tun gehabt, auch in Perl zB., weil ich immer Projekte habe mit vielen Dateien, die auch oft umbenannt werden müssen.

    Grüße
     
  18. vf47

    vf47 New Member

    Hallo Macci,

    ich hab es ausprobiert. Ist schon ein geniales Script, funktioniert aber nur mit reinen Zahlen als Dateinamen.

    Du könntest vorher mein rename-Script drüberlaufen lassen, also z. B. wenn Deine Dateien ABC_1.jpg, ABC_2.jpg heissen,
    dann erstmal mein rename-Script wie folgt anwenden:

    rename -g -s ABC_ -r 0 *.jpg

    Dann erhälst Du Dateinamen wie folgt:

    01.jpg, 02.jpg, etc.

    Dann kannst Du das awk-Script anwenden. Die Numerierung wird dann korrekt durchgeführt.

    Anschließend kannst Du den Prefix wieder anhängen mit:

    rename -g -s "^" -r ABC_ *.jpg
     
  19. Macci

    Macci ausgewandert.

    Wir brauchen aber für die Archivierung und Zuordnung die oben erwähnte Form, d.h. ich müsste dann den ganzen Ordner noch mit dem Grafikkonverter wieder in die Originalform bringen...
    menno, warum ist das so schwierig???

    ...ja, oder drei Scripte anwenden...naja...
     
  20. vf47

    vf47 New Member

    Armer Macci ;(

    Versuchs mal hiermit
    ls * | sort -r | awk -F "[_.]" '{print "mv " $0 " " $1"_"($2+1) "." $3;}' | /bin/sh
     

Diese Seite empfehlen