• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
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:

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Jetzt fehlt nur noch eine Kleinigkeit: Doppelte Namen im Ziel erkennen und darauf clever reagieren. Sonst machts "Aua".
 

doeme89

Pomme Miel
Registriert
27.12.06
Beiträge
1.477
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!
 

MacAlzenau

Golden Noble
Registriert
26.12.05
Beiträge
22.501
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.
 

doeme89

Pomme Miel
Registriert
27.12.06
Beiträge
1.477
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. ;)
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
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:

doeme89

Pomme Miel
Registriert
27.12.06
Beiträge
1.477
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. ;)