Datei Erweiterungen non-case sensitive umbenennen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von ohrobot, 07.06.2009.

  1. #1 ohrobot, 07.06.2009
    ohrobot

    ohrobot Grünschnabel

    Dabei seit:
    20.06.2008
    Beiträge:
    8
    Zustimmungen:
    0
    einfache frage. ich möchte *.jpg dateien in *.gif dateien umbenennen. dazu benutze ich folgende zuweisung:

    SOURCE_IMG=${TARGET_IMG%".jpg"}.gif

    aufgrund der case-sensitivity betrifft dies nun leider ausschließlich nur *.jpg, nicht jedoch *.JPG benannte dateien/erweiterungen. wie müsste ich die zuweisung umschreiben dass *.JPG und *.jpg in *.gif umgewandelt werden? einen tipp?
     
  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 bytepool, 07.06.2009
    Zuletzt bearbeitet: 07.06.2009
    bytepool

    bytepool Code Monkey

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

    eine wirklich einfache Loesung faellt mir dazu auch nicht ein, weil parameter expansion soweit ich weiss nur case sensitive funktioniert. Das hier waere mein Loesungsvorschlag:

    Code:
    for i in *; do
       # test for case insensitive ending of jpg
       case "$i" in
          *.[Jj][Pp][Gg])
             # count length of i
             count=${#i}
             # calculate position to which you have to expand
             pos=$((count - 3))
    
             # rename file
             echo $i ${i::$pos}gif
             ;;
       esac
    done
    
    Das echo nur noch durch mv ersetzen, und es sollte funktionieren. Wenn durch das case insensitive Ersetzen allerdings mehrere Dateien mit dem gleichen Namen entstehen, verlierst du mindestens eine der Dateien, aber das duerfte ja klar sein.

    Solltest du nicht verstehen was da genau passiert, einfach nochmal nachfragen, dann erklaer ich's dir.

    So richtig elegant und simpel ist das aber irgendwie noch nicht. ;)

    Edit:
    Ach, manchmal bin ich auch doof, das case statement ist natuerlich unnoetig:
    Code:
    for i in *.[Jj][Pp][Gg]; do
       count=${#i}
       pos=$((count - 3))
       echo $i ${i::$pos}gif
    done
    
    Das sieht doch schon wieder ein wenig freundlicher aus. ;)

    mfg,
    bytepool
     
Thema:

Datei Erweiterungen non-case sensitive umbenennen

Die Seite wird geladen...

Datei Erweiterungen non-case sensitive umbenennen - Ähnliche Themen

  1. Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...

    Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...: Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und...
  2. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  3. Dateiinhalte vergleichen - Neue Sätze dann ausgeben

    Dateiinhalte vergleichen - Neue Sätze dann ausgeben: Liebe Forumsmitglieder, ich benöte mal wieder Eure Hilfe: Ich möchte 2 Dateien vergleichen. Datei-1 hat z.B. 100 Datensätze mit mehreren Feldern...
  4. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...
  5. Timestamp an Inhalt einer Textdatei anfügen

    Timestamp an Inhalt einer Textdatei anfügen: Hallo, ich als neuer, unerfahrener Nutzer von Linux und der bash hätte folgende Frage. Und zwar würde ich gerne mit einem command den Zeitstempel...