2012-02-22 14 views
6

Estoy buscando convertir un directorio completo de HTML a HAML para que los archivos tengan el mismo nombre pero con una nueva extensión.¿Hay un comando bash para convertir un directorio completo a HAML desde HTML?

html2haml file.html.erb file.haml 

¿Puedo ejecutar un bucle para que pueda convertir todos estos archivos a la vez para que el nombre es el mismo solo se cambia la extensión?

Mis archivos:

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 

Respuesta

13

No es atractivo, pero que está funcionando: (. Prestar atención a la bandera -e de html2haml que analiza las etiquetas ERB)

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

+0

Tire esto allí 'para f in * .html.erb; hacer rm $ f; done' Y puedes limpiar los viejos * .html.erb archivos – Trip

+0

Solo para agregar, los backticks tenedores de un nuevo proceso, por lo que es una buena práctica usar '$ (...)' – Eric

+0

¿Qué quieres decir con '$ (. ..) '? – tadman

4

Usted podría haz algo como esto:

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

Editar: Si hay que buscar los archivos de plantilla de forma recursiva, y está usando bash 4.x, entonces se puede utilizar globstar:

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

De https://gist.github.com/pho3nixf1re/1281382 ve como lo hace un árbol de directorio completo:

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