2012-02-05 40 views
14

Tôi muốn đổi tên tất cả các file ERB trong dự án Git của tôi để Haml (như index.html.erb để index.html.haml)Git:. Đổi tên hoặc di chuyển tất cả các file cùng một lúc

Nếu tôi đổi tên mỗi tập tin, Tôi phải gõ lệnh sau hơn ba mươi lần.

$ git mv app/views/pages/index.html.erb app/views/pages/index.html.haml 

Tôi đã thử lệnh dưới đây nhưng không hoạt động.

$ git mv app/views/**/*.erb app/views/**/*.haml 

usage: git mv [options] <source>... <destination> 

    -n, --dry-run   dry run 
    -f, --force   force move/rename even if target exists 
    -k     skip move/rename errors 

Tôi làm cách nào để đổi tên chúng cùng một lúc?

+0

Cũng giống như ... và lệnh 'mv' khác. Di chuyển từng thư mục một hoặc viết một vòng lặp quich bash để thực hiện những gì bạn buộc phải làm ngay bây giờ nếu bạn không muốn di chuyển tất cả các tệp. –

Trả lời

22
for i in $(find . -iname "*.erb"); do 
    git mv "$i" "$(echo $i | rev | cut -d '.' -f 2- | rev).haml"; 
done 

Đối với mỗi tệp .erb, hãy tự thay thế bằng ".haml".

+0

Bạn cần bọc đối số thứ hai vào 'mv' trong' "' hoặc nó sẽ không hoạt động với tên tệp có dấu cách. –

+0

@Banthar Bạn chỉ nhận thấy vì tôi đã nhận nó ngay trong câu trả lời đầu tiên của tôi :-P. sẽ không làm việc với tên tập tin có chứa dấu trích dẫn - cách "đúng" là chạy các tên thông qua 'printf"% q "' hoặc tương tự. – Borealid

+0

Thực tế, nó không quan trọng, bởi vì 'for' sẽ tách ra Tôi đoán giải pháp tốt nhất là không đặt các ký tự ngớ ngẩn vào tên tập tin của bạn –

Các vấn đề liên quan