2010-11-19 13 views
5

मैं लगभग एक दशक तक चींटी का उपयोग कर रहा हूं, लेकिन हर बार मुझे अपने सामान्य अनुभव से परे कुछ करने की ज़रूरत होती है। यह एक एक स्पष्ट जवाब का अभाव (और सहज ज्ञान युक्त दृष्टिकोण मृत समाप्त होता है के लिए नेतृत्व)एक शॉट में कई निर्देशिकाओं (और सामग्री) की प्रतिलिपि

समस्या: नई निर्देशिका "MyInstance" करने के लिए निर्देशिका "उदाहरण" में

कॉपी कई उपनिर्देशिका (और उनकी सामग्री)। स्पष्टीकरण के लिए, कुछ निर्देशिका कॉपी करें, लेकिन स्रोत निर्देशिका में सभी उपनिर्देशिका नहीं।

स्रोत निर्देशिका:

example/ 
    ignoreThisDirectory/ 
    ignoreThisOneAlso/ 
    lib 
    etc/ 
    webapps/ 

प्रयास: डेड एंड यह प्रयास पहले काम करने के लिए दिखाई दिया पर। इसने उपनिर्देशिका lib, आदि, webapps बनाया। हालांकि 'प्रतिलिपि' ने अपनी सामग्री की प्रतिलिपि नहीं बनाई; मुझे खाली उपनिर्देशिका के साथ छोड़ दिया गया था। पहले से

<copy todir="myInstance/etc"> 
    <fileset dir="example/etc"/> 
    </copy>  
    <copy todir="myInstance/lib"> 
    <fileset dir="example/lib" /> 
    </copy>  
    <copy todir="myInstance/webapps"> 
    <fileset dir="example/webapps" /> 
    </copy>  

धन्यवाद

उत्तर

8

आप यह निर्दिष्ट कर सकते हैं:

<copy todir="myInstance" > 
    <dirset dir="example" includes="lib etc webapps"/>  
</copy>  

सफल लेकिन शब्दाडंबरपूर्ण अंत में, मैं व्यक्तिगत रूप से प्रत्येक निर्देशिका कॉपी करने, जो वर्बोज़ और गैर सूखी लग पड़ा एक फाइलसेट में एकाधिक समावेश और बहिष्करण नियम। यदि आप एक समावेश नियम निर्दिष्ट नहीं करते हैं, तो डिफ़ॉल्ट सबकुछ शामिल है, कुछ भी छोड़कर जो किसी भी नियम को बहिष्कृत करके कम से कम एक बार छोड़ दिया गया है।

<property name="src.dir" value="example" /> 
<property name="dest.dir" value="myInstance" /> 

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}"> 
     <include name="lib/**" /> 
     <include name="etc/**" /> 
     <include name="webapps/**" /> 
    </fileset> 
</copy> 

नोट ** वाइल्डकार्ड कि तीन 'अग्रणी बढ़त' उप-निर्देशिका निर्दिष्ट में से प्रत्येक के तहत पूर्ण निर्देशिका वृक्ष में लाना होगा:

यहाँ एक समावेशी उदाहरण है। वैकल्पिक रूप से, अगर आप विशेष रूप में कुछ निर्देशिकाओं बाहर करना चाहते हैं, लेकिन सभी दूसरों पर नकल, तो आप समावेश छोड़ सकता है (और इस तरह डिफ़ॉल्ट सब समावेशी व्यवहार मिलता है) और एक बहिष्करण की सूची की आपूर्ति:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}"> 
     <exclude name="ignoreThisDir*/" /> 
     <exclude name="ignoreThisOne*/" /> 
    </fileset> 
</copy> 

आप आगे कर सकता है एक बहिष्करण पैटर्न को दिए गए विशेष उदाहरण को उबालें:

<exclude name="ignore*/" /> 
+0

मैं इसके बजाय उस प्रतिलिपि बनाने के लिए उपयोग करता हूं जिसे आप प्रतिलिपि बनाना चाहते हैं। – JasonMArcher

संबंधित मुद्दे