2013-08-02 9 views
12

Tôi muốn đổi tên tất cả các thư mục theo một người thừa kế khớp với tên. Ví dụ:Đổi tên nhiều thư mục phù hợp với mẫu

Trong basedir/, tôi có:

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

Tôi muốn đổi tên tất cả các thư mục phù hợp với bar, nhưng tôi muốn giữ gìn một phần tiền tố.

Với find, tôi có thể dễ dàng tạo ra một danh sách tất cả các thư mục như thế này:

find . -name repositoryunit -type d 

Tuy nhiên, làm thế nào tôi có thể sử dụng -exec mv {} ... (hoặc có lẽ kết hợp với ứng dụng khác) để các tiền tố được bảo tồn?

Rất cám ơn trước!

Trả lời

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

-execdir thay đổi thư mục cho phụ huynh trước khi thực hiện lệnh, do đó mv đây sẽ là địa phương cho mỗi thư mục cha.

+0

Lưu ý rằng nếu trong thư mục tìm kiếm đã là thư mục "baz" thì "thanh" sẽ được chuyển vào thư mục đó. – mkudlacek

+1

Nếu bạn nhận được 'tìm: '*****': ... Không có tệp hoặc thư mục nào sau khi thực hiện lệnh, thêm' -depth', sẽ xử lý nội dung thư mục trước khi thư mục tự xóa các lỗi. – lepe