Ordnernamen verknüpfen und umkopieren - Automator?

herbit

herbit

Aktives Mitglied
Thread Starter
Dabei seit
19.09.2004
Beiträge
625
Reaktionspunkte
50
Hallo,

ich habe ein etwas komplizierteres Umbenenn-Problem, und zwar möchte ich folgendes erreichen:

vorher:

OrdnerA/UnterordnerA1/Dateien
OrdnerA/UnterordnerA2/Dateien
usw.
OrdnerB/UnterordnerB1/Dateien
OrdnerB/UnterordnerB2/Dateien

soll werden:

OrdnerA - UnterordnerA1/Dateien
OrdnerA - UnterordnerA2/Dateien
OrdnerB - UnterordnerB1/Dateien
OrdnerB - UnterordnerB2/Dateien
usw.

Ich will also sozusagen eine Ordnerhierarchie einsparen. Wie kann man das erreichen? Ich dachte an zwei Schritte: 1. die Unterordner jeweils so umbenennen, dass die Namen der übergerordneten Ordner als Namensbestandteil aufgenommen werden. 2. die Unterordner an einen anderen Ort verschieben.

Mit Automator bin ich irgendwie nicht weiter gekommen, habe damit aber auch keine Erfahrung. Evtl. mit der Kommandozeile?

Wer kann mir Tipps geben?

Grüße,
herbit
 
Im Terminal kannst Du das sicher mit einem kleinen Shell-Skript bewerkstelligen, z.B. mit zwei ineinandergeschachtelten For-Schleifen (s. man bash). (Allerdings wuerde ich Dir grundsaetzlich von Leerzeichen und Bindestrichen im Verzeichnisnamen abraten.)
Wile
 
Weil ich gerade Mittagspause hab, hier die Loesung. Geh in das Verzeichnis, in dem OrdnerA usw. liegen. Unter der Annahme, dass dort nur Ordner enthalten sind, sollte das hier Dein Problem erledigen:

Code:
for i in * ; do for j in $i/*; do [I]echo[/I] $j $i\_${j##*\/}; done; done
Das zeigt jetzt erstmal nur an. Wenn das das richtige tut, ersetze "echo" durch "mv" und es benennt um. :)

Wenn es gleich alles zusammen erledigen soll, also die alten Verzeichnisse noch loeschen, muss noch etwas dazu, so wie hier:

Code:
for i in * ; do for j in $i/*; do [I]echo[/I] $j $i\_${j##*\/}; done; [I]echo[/I] $i; done
(Da dann das erste echo durch "mv" ersetzen, das zweite durch "rm". Ist aber runtergehackt und ungetestet.)

Code jeweils in einer Zeile einfuegen.

HTH
Wile
 
Zuletzt bearbeitet:
Danke für Deine schnelle Hilfe, Wile E..
Ich habe den oberen Code ausgeführt. Es scheint so als ob "$i/*" leider "OrdnerA/*" liefert, statt die Unterordner. $j nimmt dann die einzelnen Bestandteile von "OrdnerA/*", getrennt nach Leerzeichen (die ich natürlich in den Ordnernamen habe) an.
Mach ich was falsch?
 
herbit schrieb:
Danke für Deine schnelle Hilfe, Wile E..
Ich habe den oberen Code ausgeführt. Es scheint so als ob "$i/*" leider "OrdnerA/*" liefert, statt die Unterordner. $j nimmt dann die einzelnen Bestandteile von "OrdnerA/*", getrennt nach Leerzeichen (die ich natürlich in den Ordnernamen habe) an.
Mach ich was falsch?
Ja, Leerzeichen in Dateinamen verwenden. :p
Das Problem muesste sich loesen lassen, indem man an geeigneter Stelle Anfuehrungszeichen benutzt. Etwa so wie hier (ungetestet):

Code:
for i in * ; do for j in [B]"[/B]$i[B]"[/B]/*; do echo [B]"[/B]$j[B]"[/B] [B]"[/B]$i[B]"[/B]\_[B]"[/B]${j##*\/}[B]"[/B]; done; done
Bin gerade in Eile, deshalb kann ich nicht weiter probieren. Vielleicht klappt das ja schon.

Wile
 
Super, jetzt klappts! Danke! Werde aber noch ein bisschen Testen, bevor ich es auf meine 300+ Ordner loslasse.
 
Bitteschoen! :)
Wile
 
Also, so hats letztendlich geklappt:
Code:
for i in * ; do for j in "$i"/*; do mv "$j" "$i - ${j##*\/}"; done; rm -r "$i"; done

Ich hatte zwar in der Vergangenheit immer wieder mit regulären Ausdrücken zu tun, war aber immer zu faul es "gründlich" zu lernen. Danke nochmal!
 
herbit schrieb:
Ich hatte zwar in der Vergangenheit immer wieder mit regulären Ausdrücken zu tun, war aber immer zu faul es "gründlich" zu lernen. Danke nochmal!
Das sind gar keine regulaeren Ausdruecke. :D

Uebrigens hast Du jetzt schon wieder Leerzeichen in Deinen Pfaden, aber wer nicht hoeren will... ;)

Wile
 
Wile E. schrieb:
Das sind gar keine regulaeren Ausdruecke. :D

Uebrigens hast Du jetzt schon wieder Leerzeichen in Deinen Pfaden, aber wer nicht hoeren will... ;)

Wile

Es sind Musikdateien, das sieht auf dem Player dann einfach besser aus mit Leerzeichen.

Ok, es sind keine reg. Ausdr., aber die Syntax orientiert sich doch dran oder?
 
herbit schrieb:
Es sind Musikdateien, das sieht auf dem Player dann einfach besser aus mit Leerzeichen.
Der fehlgeschlagene erste Versuch duerfte ja zeigen, warum ich etwas gegen Leerzeichen habe, aber das musst Du selbst wissen.

herbit schrieb:
Ok, es sind keine reg. Ausdr., aber die Syntax orientiert sich doch dran oder?
Nicht wirklich. Es sind mal Backslashes eingesetzt als Escape-Zeichen, ansonsten hat es mit regulaeren Ausdruecken nicht viel zu tun. Diese etwas kryptischen Teile sind einfach die bash-Variablenexpansion, regulaere Ausdruecke funktionieren anders. Wie Du siehst, kann man da ziemlich viel mit anstellen. :)

Wile
 
Leerzeichen sind oft ein Problem, haben sich aber in Dateinamen durchgesetzt. Es müsste eine Art geschütztes Leerzeichen geben, das nicht als normalse Leerzeichen interpretiert wird (so ähnlich wie in Textverarbeitungen an Stellen, an denen nicht getrennt werden soll).

Danke für die Aufklärung bzgl. bash und regulären Audrücken...


Was mich jetzt noch interessieren würde: Ginge die obige Aktion auch mit dem hochgelobten Automator? Irgendwie finde ich die keine passenden Finder-Actions dazu.
 
herbit schrieb:
Leerzeichen sind oft ein Problem, haben sich aber in Dateinamen durchgesetzt.
Durchgesetzt wuerde ich nicht sagen, ist eher weitverbreitete Unsitte. Durchgesetzt haben sich zum Beispiel Umlaute in E-Mails. :D

herbit schrieb:
Es müsste eine Art geschütztes Leerzeichen geben, das nicht als normalse Leerzeichen interpretiert wird (so ähnlich wie in Textverarbeitungen an Stellen, an denen nicht getrennt werden soll).
Das gibt es, sieht nur leicht anders aus, naemlich der Unterstrich. Der ist genau dafuer da und funktioniert auch so. Alles andere, wie das beruehmte Non-Breaking-Space ist nur als Aenderung oder Erweiterung von ASCII moeglich (in ASCII gibts das ja nicht), und bringt dann wieder andere Probleme mit sich. Wenn man auf Nummer sicher gehen will, Dateinamen nur mit [A-Za-z0-9_]. (Das ist jetzt ein regulaerer Ausdruck ;) )

Wile
 
Zurück
Oben Unten