ich hab dafür ein Script erstellt
Hi,
für genau solche Fälle habe ich schon vor Jahren ein Skript angefangen. Das kannst du gerne verwenden (GPL) und es ändern auch noch mehr Zeichen mit denen Windows nicht klar kommt mit denen es manchmal Ärger gibt. Leerzeichen, Klammern, @s, Ausrufezeichen. Das ganze definiert rekursiv, mit Überschreibschutz für schon vorhandene Dateinamen und Längenbegrenzung.
Das Teil habe ich schon lange in gebrauch; seit dem ich heute die Änderungen für dich eingepflegt habe kommt manchmal ein „mv: Aufruf von stat für „…“ nicht möglich: No such file or directory“. Keine Ahnung was das bedeutet (weiß das hier jemand?), sollte aber wohl trotzdem gehen.
HTH,
J~
j~@darkstar:~/.bin$ cat specialrename
#!/bin/bash
# specialrename aendert Zeichen in Dateinamen:
# specialrename change characters in filenames (option: recursive):
# (spaces) -\> \_
# ä -\> ae
# ö -\> oe
# ü -\> ue
# Ä -\> Ae
# Ö -\> Oe
# Ü -\> Ue
# @,(,),[,],{,} -\> -
# ! -\> \_
#
# Bei Angabe einer Verzeichnistiefe als Argument
# erfolgt die Umwandlung rekursiv.
#
# Ist der neue Dateiname schon vorhanden, wird ein Zufallswert ergaenzt.
# (Unsicherheit des Überschreibens ca. 1:10000 !)
# Weiterhin wird die Länge des Dateinamens auf 60 Zeichen begrenzt.
#
################################################################
# (C) J~, 04.Jun2005, 23.Sep2007, 27.Aug2008
# This program is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation;
# either version 3 of the License, or (at your option)
# any later version.
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
###############################################################
#
# Den InputFieldSeparator sichern
# Save the old InputFieldSeparator
ALT\_IFS=$IFS
# Zeilenumbruch in IFS schreiben
# Store newline to IFS
IFS='
'
# Dateien mit Leerzeichen im Namen finden und in die Schleife
# übergeben
# Find files with spaces in name and tranfer the list to loop
if test $\*; then
echo "Parameter angegeben: arbeite" $1 "Verzeichnisse tief"
TIEFE=$1
else
echo "Kein Parameter angegeben: arbeite nur im aktuellen Verzeichnis"
TIEFE=1
fi
for ALTERNAME in $(find -maxdepth $TIEFE -name "\*\ \*" && find -maxdepth $TIEFE -name "\*(\*" && find -maxdepth $TIEFE -name "\*)\*" && find -maxdepth $TIEFE -name "\*\[\*" && find -maxdepth $TIEFE -name "\*\]\*" && find -maxdepth $TIEFE -name "\*{\*" && find -maxdepth $TIEFE -name "\*}\*" && find -maxdepth $TIEFE -name "\*@\*" && find -maxdepth $TIEFE -name "\*ä\*" && find -maxdepth $TIEFE -name "\*ü\*" && find -maxdepth $TIEFE -name "\*ö\*" && find -maxdepth $TIEFE -name "\*Ä\*" && find -maxdepth $TIEFE -name "\*Ü\*" && find -maxdepth $TIEFE -name "\*Ö\*" && find -maxdepth $TIEFE -name "\*\!\*" ) ; do
# Leerzeichen, Klammern, @, Umlaute ersetzen
# Replace spaces etc
ZWISCHENNAME=$(echo $ALTERNAME | sed -e s/\ /\_/g | sed -e s/\\[/-/g | sed -e s/\\]/-/g | sed -e s/\(/-/g | sed -e s/\)/-/g | sed -e s/\\@/-/g | sed -e s/\{/-/g | sed -e s/\}/-/g | sed -e s/ä/\ae/g | sed -e s/ö/\oe/g | sed -e s/ü/\ue/g | sed -e s/Ä/\Ae/g | sed -e s/Ö/\Oe/g | sed -e s/Ü/\Ue/g | sed -e s/\\!/\_/g )
# Dateinamen auf 60 Stellen begrenzen
ZWISCHENNAMEEXT=${ZWISCHENNAME##\*.} # Erweiterung merken
NEUERNAME=${ZWISCHENNAME%.\*} # alles bis zum letzten Punkt
# (ausschliesslich)
NEUERNAME=${NEUERNAME:0:60} # ab Pos 0, 60 Zeichen Laenge
NEUERNAME="${NEUERNAME}.${ZWISCHENNAMEEXT}" # und wieder zusammenbauen...
# Kontrollausgabe
# output for control
echo $ALTERNAME" -\> "$NEUERNAME # gibt Dateinamen aus
# umbenennen
# rename files
if test -f $NEUERNAME; then
echo $NEUERNAME schon vorhanden. Durch Zufallswert ergaenzt.
mv "$ALTERNAME" "$NEUERNAME".$RANDOM
else
mv "$ALTERNAME" "$NEUERNAME"
fi
done
# alten IFS wieder herstellen
# replace old IFS
IFS=$ALT\_IFS