Script zum Auffinden von Duplikaten/Massen-Rename...

21/06/2010 - 21:10 von M.H. | Report spam
Hallo.
Ich habe hier ein kleines Problem mit Duplikaten/Namen unter
Linux/Windows. Es ist so: Ein bestimmtes Programm (Cachewolf) làdt
XML-Dateien und dazugehörige Bilder (jpg, gif, png) zu von einer
bestimmten Seite herunter und legt das ganze in einem Ordner ab. Da
kommen schnell mal ein paar tausend files zusammen.

Nun werden die Dateien lokal so gespeichert:
xml: 03283ec.xml
Bilder: GC11FDN.jpg

Man sieht also, dass die xml-Dateien alle in Kleinschreibung geladen
werden aber die Bilder gemischt, also der erste Teil in Großschreibung
und das Suffix in Kleinschreibung.
Ich benötige nun ein Script, das folgendes macht:
Durchsuche alle Ordner unter My_Profiles nach *.jpg | *.png | *.gif
und àndere die Basenames alle einheitlich in Großschreibung.
(Der Hintergrund ist, dass ich alles per Unison auf eine FAT32-SD-Karte
synchronisiere und es da zu Namenskonflikten mit Groß-/KLeinschreibung
kommt)

Wer kann mir da weiterhelfen? Ich hatte bisher gedacht, dass das
Programm nicht case-sensitiv sucht, doch da habe ich mich geirrt, so
dass ich momentan alle Bilder komplett in Kleinschreibung umgenannt habe

Der Befehl hierzu lautete:
#cd My_Profiles/GC_20km
find . -type f -exec sh -c 'mv -f "$0" "`echo "$0" | tr \[:upper:\]
\[:lower:\]`"' {} \;
 

Lesen sie die antworten

#1 Hauke Laging
22/06/2010 - 09:58 | Warnen spam
M.H. wrote:

Damit klar wird, ob ich es richtig verstehe...

Ursprünglich hieß die Datei

Bilder: GC11FDN.jpg

Der Befehl hierzu lautete:
#cd My_Profiles/GC_20km
find . -type f -exec sh -c 'mv -f "$0" "`echo "$0" | tr \[:upper:\]
\[:lower:\]`"' {} \;



Nun heißt sie GC11FDN.JPG, und es soll der vorige Zustand wiederhergestellt
werden?

Dafür würde ich ein Script schreiben und die Dateinamen alle reinpipen:

find My_Profiles/GC_20km -type f -name '*.JPG' -print0 |
xargs -0 umbenennungsscript.sh

umbenennungsscript.sh sieht dann etwa so aus:

#!/bin/bash

while [ $# -gt 0 ]
do
path="$1"
shift
if [ x"$path" = x"${path//\//+}" ]
then
dirpath=""
basename="$path"
else
dirpath="${path%/*}/"
basename="${path##*/}"
fi
name="${basename%.*}"
extension="${basename#"$name"}"
# aus Performancegründen case statt tr o.Ä. pro Datei
case "$extension" in
.JPG)
ext_lower=.jpg
;;
.PNG)
ext_lower=.png
;;
.GIF)
ext_lower=.gif
;;
*)
echo "unbekannte Namenserweiterung '${extension}'"\
" (bei Datei '${basename}'); wird übersprungen" >&2
continue
;;
esac
ext_new="$ext_lower"
newpath="${dirpath}${name}${ext_new}"
if [ -e "$newpath" ]
then
echo "Zieldatei '${newpath}' existiert; die Quelldatei "\
"('${path}') wird übersprungen." >&2
continue
fi
if ! mv "$path" "$newpath"
then
echo "Fehler beim Umbenennen von '${path}'"
fi
done


CU

Hauke
http://www.hauke-laging.de/ideen/
D44C 6A5B 71B0 427C CED3 025C BD7D 6D27 ECCB 5814

Ähnliche fragen