2012-02-22 8 views
6

Sto cercando di convertire un'intera directory di HTML in HAML in modo che i file abbiano lo stesso nome ma con una nuova estensione.Esiste un comando bash per convertire un'intera directory in HAML da HTML?

html2haml file.html.erb file.haml 

posso eseguire un ciclo in modo che posso convertire tutti i file in una sola volta in modo che il nome è lo stesso, ma l'estensione è cambiato?

miei file:

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 

risposta

13

non è sexy, ma sta funzionando: (. Prestare attenzione alla bandiera -e di html2haml analizza i tag ERB)

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

+0

Lancia questo in 'per f in * .html.erb; fai rm $ f; done' E puoi pulire i vecchi file * .html.erb – Trip

+0

Solo per aggiungere, i backtick forzano un nuovo processo, quindi è meglio usare '$ (...)' – Eric

+0

Cosa intendi con '$ (. ..) '? – tadman

4

Si potrebbe fare qualcosa del genere:

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

Edit: Se è necessario cercare i file di template in modo ricorsivo e si sta utilizzando bash 4.x, quindi è possibile utilizzare globstar:

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

Da https://gist.github.com/pho3nixf1re/1281382 sembra si fa un intero albero di directory:

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