2012-07-30 12 views
5

.haml dosyalarım var ve bunları otomatik olarak .html dosyalarına dönüştürmek ve .haml değiştirildiği zaman bu güncelleştirmeyi güncellemek istiyorum.GNU ile Unix dosyasını bulun Otomatik olarak güncelleme yapmak için hazırla

jenerik makefile kural sorun yok:

%.html: %.haml 
    hamlpy $< [email protected] 

Ama şimdi aşağıdakileri yapmak için bir kural veya bir komut gerekir:

  • templates/
  • make X.html yürütmek tüm X.haml dosyaları bulmak Komut, X aynı dosya adıdır (haml, html ile değiştirilir).

Bunu GNU Make veya Unix ile nasıl bulacağımı bulamıyorum.

cevap

8

sizin *.haml dosyaların tümü de adı (yani boşluk veya başka komik karakter), sen find(1) çağrısı ile bunu yapabilir ise:

HAML_FILES = $(shell find templates/ -type f -name '*.haml') 
HTML_FILES = $(HAML_FILES:.haml=.html) 

all: $(HTML_FILES) 

%.html : %.haml 
     hamlpy $< [email protected] 
7

Belirli bir dizindeki dosyaları bulmak için wildcard işlevini yapmak GNU'yu kullanabilirsiniz:

INDIR := templates 
OUTDIR := ${CURDIR} 

haml_files := $(wildcard ${INDIR}/*.haml) 
html_files := $(subst ${INDIR}/,${OUTDIR}/,${haml_files:.haml=.html}) 

all : ${html_files} 

clean : 
    rm -f ${html_files} 

${OUTDIR}/%.html : ${INDIR}/%.haml 
    hamlpy $< [email protected] 

.PHONY : all clean 

INDIR ve OUTDIR giriş ve iutputs için geçerli dizin kullanmak, örneğin, komut satırında özelleştirilebilir:

$ make INDIR=. OUTDIR=. 
+0

"Şablonlar" dan daha derin olabilirlerse? –

+0

Yukarıdaki, '.haml' dosyalarının ne kadar derin olursa olsun tek klasörde olduğunu varsayar. 'Şablonlar/A/B/C/D/E /'. –

İlgili konular