Ungeliebte Zeichen in Dateinamen rekursiv aendern

11/09/2007 - 13:01 von Matthias Dort | Report spam
Hallo,

vielleicht gibt es ja schon so etwas, bevor ich das Rad neu erfinden muß...

Ich bin auf der Suche nach einer Möglichkeit per script rekursiv
Verzeichnisse nach Dateinamen zu durchforsten. Dabei soll der Dateiname
zeichenweise umgeschrieben werden, sobalt sich etwas anderes als A-Z a-z 0-9
"-" "_" "." findet. Diese Zeichen incl. Leerzeichen! sollen in einen
Unterstrich umgeschrieben werden. Dabei soll eine Warnung ausgegeben werden,
falls eine Datei nach dem Umschreiben eine bereits existierende überschreiben
würde. Das ganze soll per cron einmal am Tag über ein Samba-share laufen.
Danach kommt rsync zum Zug.

Auf das ganze Prolem bin ich erst gestoßen, als ich Probleme mit rsync bekam.
Dieser kommt nàmlich nicht mit Sonderzeichen im Dateinamen zurecht, wenn das
Zielverzeichnis auf einem anderen Server liegt, bei dem eine andere
Zeichentabelle gilt. Der Dateiabgleich geht dann in die Hose.

Vielen Dank für einen Hinweis!

Gruß

Matthias
 

Lesen sie die antworten

#1 Jochen Hub
11/09/2007 - 15:45 | Warnen spam
Matthias Dort wrote:
Hallo,

vielleicht gibt es ja schon so etwas, bevor ich das Rad neu erfinden muß...

Ich bin auf der Suche nach einer Möglichkeit per script rekursiv
Verzeichnisse nach Dateinamen zu durchforsten. Dabei soll der Dateiname
zeichenweise umgeschrieben werden, sobalt sich etwas anderes als A-Z a-z 0-9
"-" "_" "." findet. Diese Zeichen incl. Leerzeichen! sollen in einen
Unterstrich umgeschrieben werden. Dabei soll eine Warnung ausgegeben werden,
falls eine Datei nach dem Umschreiben eine bereits existierende überschreiben
würde. Das ganze soll per cron einmal am Tag über ein Samba-share laufen.
Danach kommt rsync zum Zug.

Auf das ganze Prolem bin ich erst gestoßen, als ich Probleme mit rsync bekam.
Dieser kommt nàmlich nicht mit Sonderzeichen im Dateinamen zurecht, wenn das
Zielverzeichnis auf einem anderen Server liegt, bei dem eine andere
Zeichentabelle gilt. Der Dateiabgleich geht dann in die Hose.

Vielen Dank für einen Hinweis!




Hallo Matthias,

versuch doch mal was in der Art (natuerlich ungetestet)

find . -type f \
| while read file; do
dir="$(dirname "$file")"
fn="$(basname "$file")"
newname=$(echo "$fn"|tr -c '![A-Z,a-z,0-9,]' '_')
if [[ -e "$dir/$newname" ]]; then
echo Warning...
else
mv "$file" "$dir/$newname"
fi
done


Das sollte als Start vielleicht helfen.

Viel Glueck,
Jochen

Ähnliche fragen