2012-02-22 12 views
6

मैं एचटीएमएल की एक पूरी निर्देशिका को एचएएमएल में परिवर्तित करना चाहता हूं ताकि फाइलों का एक ही नाम हो लेकिन एक नए एक्सटेंशन के साथ।क्या एक संपूर्ण निर्देशिका को HTML से HAML में परिवर्तित करने के लिए कोई बैश कमांड है?

html2haml file.html.erb file.haml 

मैं एक पाश ताकि मैं इन सभी फ़ाइलों को एक बार में सभी परिवर्तित कर सकते हैं ताकि नाम एक ही है बस एक्सटेंशन बदल गया है दिखा सकता हूं?

मेरे फाइलें:

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 

उत्तर

13

यह सेक्सी नहीं है, लेकिन यह काम कर रहा है: (। html2haml की -e ध्वज पर ध्यान यह पार्स ERB टैग)

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

+0

एफ में * .html.erb में फेंक दें; आरएम $ एफ करो; किया गया 'और आप पुरानी * .html.erb फ़ाइलों को साफ़ कर सकते हैं – Trip

+0

बस जोड़ने के लिए, बैकटिक्स एक नई प्रक्रिया काटना है, इसलिए '$ (...)' – Eric

+0

का उपयोग करना बेहतर अभ्यास है जिसका मतलब '$ (। ..) '? – tadman

4

आप कर सकते थे ऐसा कुछ करें:

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

संपादित करें: आप रिकर्सिवली टेम्पलेट फ़ाइलों के लिए देखने की जरूरत है और आप bash 4.x का उपयोग कर रहे हैं, तो आप globstar उपयोग कर सकते हैं:

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

https://gist.github.com/pho3nixf1re/1281382 से लगता है कि यह एक पूरी निर्देशिका वृक्ष करता है:

#!/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 
संबंधित मुद्दे