2012-02-22 22 views
6

Tôi đang tìm cách chuyển đổi toàn bộ thư mục HTML thành HAML sao cho các tệp có cùng tên nhưng với một phần mở rộng mới.Có lệnh bash để chuyển đổi toàn bộ thư mục thành HAML từ HTML không?

html2haml file.html.erb file.haml 

Tôi có thể chạy vòng lặp để tôi có thể chuyển đổi tất cả các tệp này cùng một lúc để tên này chỉ giống với phần mở rộng được thay đổi không?

My files:

continue_login.html.erb 
expired_trial.html.erb 
expired_trial.mobile.erb 
login.html.erb 
login.mobile.erb 
recover_password.html.erb 
signup.html.erb 
trial_expires_soon.html.erb 
trial_expires_soon.mobile.erb 

Trả lời

13

Đó không phải là sexy nhưng nó làm việc: (. Chú ý đến -e cờ của html2haml nó phân tích các thẻ ERb)

for file in $(find . -type f -name \*.html.erb); do 
    html2haml -e ${file} "$(dirname ${file})/$(basename ${file} .erb).haml"; 
done 

+0

Hãy ném điều này vào đó 'cho f trong * .html.erb; làm rm $ f; done' Và bạn có thể dọn dẹp các tệp * .html.erb cũ – Trip

+0

Chỉ cần thêm, backticks fork một quy trình mới, vì vậy tốt hơn nên sử dụng '$ (...)' – Eric

+0

Bạn có ý nghĩa gì bởi '$ (. ..) '? – tadman

4

Bạn có thể làm điều gì đó như sau:

for f in *.html.erb; do html2haml $f ${f/\.html\.erb/.haml}; done 

Edit: Nếu bạn cần phải tìm kiếm các file mẫu đệ quy và bạn đang sử dụng bash 4.x, sau đó bạn có thể sử dụng globstar:

shopt -s globstar 
for f in **/*.html.erb; do html2haml $f ${f/\.html\.erb/.haml}; done 
0

Từ https://gist.github.com/pho3nixf1re/1281382 trông giống như nó một cây thư mục toàn bộ:

#!/bin/bash 
if [ -z "$1" ]; then 
    wdir="." 
else 
    wdir=$1 
fi 

for f in $(find . -name '*.erb'); do 
    out="${f%.erb}.haml" 
    if [ -e $out ]; then 
    echo "skipping $out; already exists" 
    # rm $f 
    else 
    echo "hamlifying $f" 
    html2haml $f > $out 
    # rm $f 
    fi 
done 
Các vấn đề liên quan