2012-07-30 16 views
5

मेरे पास .haml फ़ाइलें हैं और उन्हें स्वचालित रूप से .html फ़ाइलों में कनवर्ट करना चाहते हैं और .haml बदलते समय बाद में अपडेट करना चाहते हैं।यूनिक्स के साथ यूनिक्स खोजें

सामान्य makefile नियम कोई समस्या नहीं है:

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

लेकिन अब मैं एक नियम या कमांड की जरूरत निम्न कार्य करें:

  • में templates/
  • निष्पादित make X.html सभी X.haml फ़ाइलों को ढूंढना कमांड, जहां एक्स एक ही फ़ाइल नाम है (hamlhtml के साथ प्रतिस्थापित किया गया है)।

मुझे यह नहीं पता कि जीएनयू मेक या यूनिक्स के साथ ऐसा कैसे किया जाए।

उत्तर

8

यदि आपका *.haml फ़ाइलों के सभी अच्छी तरह से नाम (यानी कोई रिक्त स्थान या अन्य अजीब अक्षर), आप find(1) के लिए एक कॉल के साथ यह कर सकते हैं कर रहे हैं:

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

all: $(HTML_FILES) 

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

आप जीएनयू wildcard समारोह बनाने के लिए उपयोग कर सकते एक निश्चित निर्देशिका में फ़ाइलों को खोजने के लिए:

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 और OUTDIR कमांड लाइन पर अनुकूलित किया जा सकता, उदाहरण के लिए, निवेश और iutputs के लिए वर्तमान निर्देशिका का उपयोग करें:

$ make INDIR=. OUTDIR=. 
+0

क्या होगा यदि वे 'टेम्पलेट्स' से गहरे हो सकते हैं? –

+0

उपरोक्त मानते हैं कि '.haml' फ़ाइलें सभी एक फ़ोल्डर में हैं चाहे कितनी गहरी हो, उदा। 'टेम्पलेट्स/एक/बी/सी/डी/ई /'। –