2010-11-18 8 views
7

मैं एक चींटी लक्ष्य बनाना चाहता हूं जो निर्देशिका में फाइलों को उसी निर्देशिका संरचना के साथ एक गंतव्य निर्देशिका में प्रतिलिपि बनाता है, साथ ही एक और उपफोल्डर जोड़ा गया है।फ़ाइलों को एक अलग उपनिर्देशिका में कॉपी करने के लिए मैपर और फाइलसेट का उपयोग करना?

उदाहरण के लिए, स्रोत है:

a/b/c/foo.pdf 
d/e/f/bar.pdf 

मैं गंतव्य होना चाहते हैं:

a/b/c/x/foo.pdf 
d/e/f/x/foo.pdf 

यहाँ मेरी लक्ष्य है अब तक, लेकिन यह कुछ भी करने जा करने के लिए प्रकट नहीं होता है:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}" casesensitive="yes"> 
     <include name="**${file.separator}foo.pdf" /> 
    </fileset>  
    <mapper type="glob" 
      from="foo.pdf" to="x${file.separator}foo.pdf" />    
</copy> 

मुझे क्या याद आ रही है?

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}" casesensitive="yes"> 
     <include name="**/*.pdf"/> 
    </fileset> 
    <mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/x/\2" /> 
</copy> 

मैं हार्ड-कोडेड file.separators का उपयोग किया है छोटा करने के लिए:

उत्तर

11

आप एक regexp नक्शाकार इस्तेमाल कर सकते हैं। असल में, आप इनपुट फ़ाइल (से) को निर्देशिका और फ़ाइल नाम में पथ विभाजित करते हैं (\1 और \2 पर कब्जा करें) और उसके बाद \x उनके बीच अतिरिक्त तत्व डालें।

मैं आपके उदाहरण पर स्पष्ट नहीं हूं - ऐसा लगता है कि आप 'bar.pdf' से मेल खाना चाहते हैं और इसे 'foo.pdf' के साथ-साथ निर्देशिका को बदलना चाहते हैं। आपको लगता है कि क्या करने की जरूरत है, तो आप सरल regexp मानचित्रकारों की एक जोड़ी चेन, बल्कि एक जटिल एक अप पकाने के लिए कोशिश कर रहा से विचार कर सकते हैं:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}" casesensitive="yes"> 
     <include name="**/*.pdf"/> 
    </fileset> 
    <chainedmapper> 
     <mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/x/\2" /> 
     <mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/foo.pdf" /> 
    </chainedmapper> 
</copy> 

एक glob नक्शाकार उपयोग करते समय, आप में एक वाइल्डकार्ड * निर्दिष्ट करने की आवश्यकता मैदान से:

दोनों के लिए और से आवश्यक हैं और पैटर्न कि सबसे एक में शामिल हो सकते हैं * परिभाषित करते हैं। प्रत्येक स्रोत फ़ाइल के लिए पैटर्न से मेल खाता है, एक लक्ष्य फ़ाइल का नाम से * में टेक्स्ट से पैटर्न के साथ पैटर्न में पैटर्न को प्रतिस्थापित करके पैटर्न में बनाया जाएगा। स्रोत फ़ाइल नाम जो पैटर्न से से मेल नहीं खाते हैं उन्हें अनदेखा कर दिया जाएगा।

तो कुछ इस तरह काम कर सकते हैं:

<mapper type="glob" from="*/foo.pdf" to="*/x/foo.pdf" /> 
+0

क्षमा करें, मैं भ्रम की बात करने के लिए मेरी फ़ाइल नाम करना मुश्किल होता था। वे दोनों का नाम बदलकर foo.pdf किया जाना चाहिए था। किसी भी घटना में, पहले कोड ब्लॉक ने मेरे लिए यह किया था। धन्यवाद! मेरे ग्लोब मैपर गलत क्यों था पर कोई विचार? – GJTorikian

+0

@GJTorikian - मैंने ग्लोब मैपर, एचटी पर एक नोट जोड़ा। –