Ordnernamen verknüpfen und umkopieren - Automator?

Dieses Thema im Forum "Mac OS X" wurde erstellt von herbit, 24.10.2005.

  1. herbit

    herbit Thread Starter MacUser Mitglied

    Beiträge:
    618
    Zustimmungen:
    50
    Registriert seit:
    19.09.2004
    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
     
  2. Wile E.

    Wile E. MacUser Mitglied

    Beiträge:
    1.862
    Zustimmungen:
    4
    Registriert seit:
    09.03.2005
    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
     
  3. Wile E.

    Wile E. MacUser Mitglied

    Beiträge:
    1.862
    Zustimmungen:
    4
    Registriert seit:
    09.03.2005
    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: 24.10.2005
  4. herbit

    herbit Thread Starter MacUser Mitglied

    Beiträge:
    618
    Zustimmungen:
    50
    Registriert seit:
    19.09.2004
    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?
     
  5. Wile E.

    Wile E. MacUser Mitglied

    Beiträge:
    1.862
    Zustimmungen:
    4
    Registriert seit:
    09.03.2005
    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
     
  6. herbit

    herbit Thread Starter MacUser Mitglied

    Beiträge:
    618
    Zustimmungen:
    50
    Registriert seit:
    19.09.2004
    Super, jetzt klappts! Danke! Werde aber noch ein bisschen Testen, bevor ich es auf meine 300+ Ordner loslasse.
     
  7. Wile E.

    Wile E. MacUser Mitglied

    Beiträge:
    1.862
    Zustimmungen:
    4
    Registriert seit:
    09.03.2005
    Bitteschoen! :)
    Wile
     
  8. herbit

    herbit Thread Starter MacUser Mitglied

    Beiträge:
    618
    Zustimmungen:
    50
    Registriert seit:
    19.09.2004
    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!
     
  9. Wile E.

    Wile E. MacUser Mitglied

    Beiträge:
    1.862
    Zustimmungen:
    4
    Registriert seit:
    09.03.2005
    Das sind gar keine regulaeren Ausdruecke. :D

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

    Wile
     
  10. herbit

    herbit Thread Starter MacUser Mitglied

    Beiträge:
    618
    Zustimmungen:
    50
    Registriert seit:
    19.09.2004
    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?
     
Die Seite wird geladen...

Diese Seite empfehlen