2012-02-22 9 views
6

Szukam przekonwertować cały katalog HTML na HAML, tak aby pliki miały taką samą nazwę, ale z nowym rozszerzeniem.Czy istnieje polecenie bash do konwersji całego katalogu na HAML z HTML?

html2haml file.html.erb file.haml 

mogę uruchomić pętlę, tak aby można przekonwertować wszystkie te pliki na raz tak, że nazwa jest taka sama, tylko rozszerzenie się zmieniło?

Moje pliki:

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 

Odpowiedz

13

To nie jest sexy, ale to działa: (. Należy zwrócić uwagę na flagi -e z html2haml analizuje tagów ERB)

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

+0

Wrzuć to do 'forf in * .html.erb; rm $ f; done "I możesz wyczyścić stare pliki * .html.erb – Trip

+0

Aby dodać, backticks rozwidlają nowy proces, więc lepiej jest użyć' $ (...) ' – Eric

+0

Co masz na myśli przez' $ (. ..) '? – tadman

4

Mogłabyś Zrób coś takiego:

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

Edit: Jeśli trzeba szukać plików szablonów rekurencyjnie i używasz bash 4.x, wtedy można użyć globstar:

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

Od https://gist.github.com/pho3nixf1re/1281382 wygląda to robi całe drzewo katalogów:

#!/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