2013-08-02 12 views
12

Chciałbym zmienić nazwy wszystkich katalogów w bazie danych, które pasują do nazwy. Na przykład:Zmień nazwę wielu katalogów pasujących do wzorca

W basedir/, mam:

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

Chciałbym zmienić nazwy wszystkich katalogów dopasowania bar, ale chciałbym zachować część prefiksu.

Z find, mogę łatwo zrobić listę wszystkich katalogów tak:

find . -name repositoryunit -type d 

Jednak, jak można używać -exec mv {} ... (lub może łączyć się z innej aplikacji), tak, że przedrostek jest zachowana?

Wielkie dzięki z góry!

Odpowiedz

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

-execdir zmienia katalog do rodziców przed wykonaniem polecenia, więc mv tutaj będzie lokalny do każdego katalogu nadrzędnego.

+0

Należy pamiętać, że jeśli w szukanym katalogu jest już katalog "baz", zostanie do niego przeniesiony "pasek". – mkudlacek

+1

Jeśli otrzymasz 'find: '*****': ... Brak takiego pliku lub katalogu' po wykonaniu polecenia, dodaj '-depth', który przetworzy zawartość katalogów przed usunięciem błędów przez sam katalog. – lepe