2013-08-02 13 views
12

Ich möchte alle Verzeichnisse unter einem basedir umbenennen, die einem Namen entsprechen. Zum Beispiel:Mehrere Verzeichnisse umbenennen, die dem Muster entsprechen

In basedir/, ich habe:

- foo/bar/blah 
- my/bar/foo 
- some/bar/foo1 
- other/foo/bar 

Ich möchte alle Verzeichnisse umbenennen bar passend, aber ich möchte das Präfix Teil bewahren.

Mit find, ich kann einfach eine Liste aller Verzeichnisse wie diese machen:

find . -name repositoryunit -type d 

aber wie kann ich -exec mv {} ... (oder vielleicht mit einer anderen App kombinieren), so dass das Präfix erhalten bleibt?

Vielen Dank im Voraus!

Antwort

21
find . -name bar -type d -execdir mv {} baz \; 

-execdir ändert Verzeichnis auf das übergeordnete bevor der Befehl ausgeführt, so dass hier die mv zu jedem Elternverzeichnis lokal sein wird.

+0

Beachten Sie, dass, wenn im gesuchten Verzeichnis bereits ein Verzeichnis "baz" ist, der "Balken" in das Verzeichnis verschoben wird. – mkudlacek

+1

Wenn Sie nach dem Ausführen des Befehls 'find: '*****': ... Keine solche Datei oder kein Verzeichnis erhalten haben, fügen Sie' -depth' hinzu, wodurch der Inhalt der Verzeichnisse verarbeitet wird, bevor das Verzeichnis selbst die Fehler beseitigt. – lepe

Verwandte Themen