• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Files mit Bash-Script umbenennen

doeme89

Pomme Miel
Registriert
27.12.06
Beiträge
1.477
Hallo zusammen

Es geht darum sehr viele Dateien auf einen neuen Server zu kopieren. Die Quelle ist ein OS X Server, das Ziel ein Windows Server. Wie ihr euch vielleicht denken könnt, gibt es einige Probleme mit den Dateinamen, da viele leider Sonderzeichen enthalten. Der eigentliche Kopiervorgang wird mit robocopy auf Windows bewerkstelligt, soweit alles gut.

Was ich noch tun will ist die Sonderzeichen eliminieren... Damit auch wirklich alle Verzeichnisse gelesen werden (dies ist jetzt nicht der Fall), müssen diese weg! Im Netz habe ich ein praktisches Bash-Script gefunden, welches aber leider nicht ganz das tut, was ich benötige:

Code:
for f in "$1"/*; do
  dir=$(dirname "$f")
  file=$(basename "$f")
  mv "$f" "${dir}/${file//[^0-9A-Za-z.]}"
done

Die Input-Variable stammt in meinem Fall von einem Automator-Ablauf, in welchem ich das zu bearbeitende Verzeichnis auswähle. Schade am Script ist, dass es einfach nur die Sonderzeichen löscht. Mein Wunsch wäre es, diese würden durch einen Unterstrich ersetzt. Ausserdem wäre es super, wenn Umlaute durch ue, ae, oe ersetzt würden.

Wie mache ich das?

Danke für eure Hilfe!

Gruss
 
Sonderzeichen ersetzen mit dem Automator? Ich glaube da ist das Terminal deutlich besser geeignet:

Code:
for f in "$1"/*; do
  file=$(dirname "$f")/$(basename "$f" | sed 's/ä/ae/g;s/ö/oe/g;s/ü/ue/g;s/Ä/Ae/g;s/Ö/Oe/g;s/Ü/Ue/g;' | iconv -f utf8 -t ascii//TRANSLIT//IGNORE | sed 's/[^a-zA-Z0-9. _-]/_/g');
  tmpfile="$file";
  i=2;
  while [[ -e "$tmpfile" && \("$file" != "$f"\) ]]; do
     tmpfile="${file%.*} $i$(echo "$file" | sed 's/.*[.]/./g;s/^[^.].*//g')";
     ((i++));
  done;
  mv -v "$f" "$tmpfile";
done;

Das Skript ersetzt
- Umlaute
- nicht-ASCII-Zeichen mit ähnlichen Zeichen (z.B. å mit a)
- Satzzeichen (außer -, _, . und ␣) mit _

Vorher bitte bei unwichtigen Daten testen.

Edit: Mehrfach vorhandene Dateien werden mit einer Laufzahl versehen.
 
Zuletzt bearbeitet:
Jetzt fehlt nur noch eine Kleinigkeit: Doppelte Namen im Ziel erkennen und darauf clever reagieren. Sonst machts "Aua".
 
Wozu mit dem Terminal experimentieren und Schaden anrichten?
Benutze den Automator, um viele Files umzubenennen. Der ist dazu geschaffen.
Salome

Natürlich experimentiere ich nicht einfach mit den richtigen Daten. ;-) Automator finde ich ein super Tool, nur bietet es leider für meine Bedürfnisse nun zu wenig Optionen. Ausserdem habe ich schlechte Erfahrungen gemacht, dass nicht alle Files umbenannt werden (werden einfach übersprungen). Bei der Datenmenge die jetzt zu ändern ist (2TB!!) verlasse ich mich lieber auf solide Software!
 
Welche Dateien werden denn übersprungen? Da dürfte doch ein System dahinterstehen, und wenn man das kennt, kann man vielleicht etwas dagegen tun.
NameMangler zum Beispiel, auch zum Dateiumbenennen, überspringt Dateinemane mit einem Schrägstrich, weil es den intern fehlerhaft als Doppelpunkt interpretiert. Wenn man's weiß, kann man vorher alle Doppelpunkte durch ein anderes Zeichen ersetzen.
 
Danke für eure Tipps!!

Nachdem mein erster Versuch gescheitert war, versuche ich jetzt eine andere Lösung zu finden. Das obige Skript hat mir meinen Mac leider komplett zerschossen... Upps! Dank DeployStudio konnte dieser allerdings schnell wiederhergestellt werden. ;-)
 
Was ist denn genau passiert? Ich rate mal: Du hast bei der Aktion "Shell-Script ausführen" nicht "Eingabe übergeben: Als Argumente" ausgewählt und es hat die oberste Dateiebene umbenannt? :)

Edit: Das hätte mir eigentlich früher einfallen sollen, aber wenn du die vorletzten Zeile abänderst in "echo mv -v ...", dann macht das Skript nichts, du siehst aber, welche Dateien umbenannt werden. Kann zum Testen sehr hilfreich sein.
 
Zuletzt bearbeitet:
Eigentlich war mein Versuch saublöd. Das Skript hat im Automator Workflow nicht funktioniert. Da ich dort keine Rückmeldung erhalten habe, versuchte ich das Skript "mal kurz" in Terminal aus.

Hätte schon stutzig werden sollen als ich keine Zugriffsrechte hatte. Hab dann trotzdem mal root gewährt (mit sudo), aber das war zu leichtsinnig... Ja, die oberste Dateiebene wurde umbenannt und dupliziert und weiss ich was alles. Das ganze Volume war nicht mehr bootbar. :eek:

Wie gesagt, der Schaden hielt sich in Grenzen - DeployStudio konnte es direkt beheben. ;)