Datei Erweiterungen non-case sensitive umbenennen

O

ohrobot

Grünschnabel
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?
 
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
 
Zuletzt bearbeitet:

Ähnliche Themen

Benötige Hilfe- Dateien vergleichen

Squid als RPCoHTTPS Proxy für Outlook Anywhere

0-laenge Pakete und Xorg Probleme

defektes Programm entfernen

Netzwerkeinrichtung: Router/Serverlösung

Zurück
Oben