2009-11-06 12 views
87

का उपयोग कर निर्देशिका की प्रतिलिपि बनाने के लिए मैंने निर्देशिका पेड़ की प्रतिलिपि बनाने के लिए copydir का उपयोग किया है, लेकिन इसे बहिष्कृत किया गया है। मेरी निर्देशिका में कुछ उप-निर्देशिकाएं हैं, और उनमें से कुछ में फ़ाइलें हैं और अन्य में अधिक उप-निर्देशिकाएं हैं।चींटी

मैं पूरे पेड़ की प्रतिलिपि कैसे बना सकता हूं?

+5

लगता है जैसे आप एक रिकर्सिव कॉपी करना चाहते हैं। और यह वह समाधान है जिसे Omnipresent ने दिया था। यदि प्रश्न में "रिकर्सिव" शब्द दिखाई देता है तो अधिक लोगों को यह प्रश्न मिल सकता है। – Jason

उत्तर

101
<copy todir="${dest.dir}" > 
    <fileset dir="${src.dir}" includes="**"/> 
</copy> 

(रिकर्सिव प्रतिलिपि किया)

+2

जाहिर है, जब आप सबकुछ चाहते हैं तो 'शामिल' आवश्यक नहीं है (उपयोगकर्ता * s1n * द्वारा उत्तर देखें) – Abel

+30

यह {src.dir} की सामग्री की प्रतिलिपि बनाता है, लेकिन वास्तविक निर्देशिका – cmcginty

+0

प्रतियां नहीं बल्कि इसकी सामग्री है। –

23

आप केवल निर्देशिका (बिना संपत्ति भी शामिल है) निर्दिष्ट करने के लिए होना चाहिए का मानना ​​है कि आप क्या चाहते हैं क्या करेंगे ...:

<copy todir="../new/dir"> 
    <fileset dir="src_dir"/> 
</copy> 

देखें अधिक जानकारी और उदाहरणों के लिए manual

+12

@ s1n यह आदेश केवल src_dir की सभी सामग्री को ../new/dir पर कॉपी करता है और src_dir नहीं। हम src_dir (निर्देशिका) को दूसरे स्थान पर कैसे कॉपी करते हैं? –

1

उदाहरण से here, आप कॉपी कार्य का उपयोग कर एक साधारण चींटी फ़ाइल लिख सकते हैं।

<project name="MyProject" default="copy" basedir="."> 
    <target name="copy"> 
     <copy todir="./new/dir"> <fileset dir="src_dir"/> </copy> 
    </target> 
</project>

यह अंदर src_dirnew/dir करने के लिए (यह शामिल नहीं है) सब कुछ नकल करना चाहिए।

+6

यह सिर्फ निर्देशिका की सामग्री को कॉपी कर रहा है। सीधे सामग्री सहित नहीं। :( – ghostCoder

87

निर्देशिका सहित सामग्री कॉपी करें।

<copy todir="${dest.dir}" > 
    <fileset dir="${src.dir.parent}"> 
     <include name="${src.dir}/**"/> 
    </fileset> 
</copy> 
+10

यह सही जवाब होना चाहिए। दूसरा उत्तर प्रश्न के लिए है "आप एंटी का उपयोग करके निर्देशिका की सामग्री कैसे कॉपी करते हैं"। एक सूक्ष्म अंतर है। – cmcginty

+0

"यह सही उत्तर होना चाहिए": बिल्कुल, यद्यपि जब आप अपने संसाधनों को अपेक्षित पथनामों से लोड नहीं कर सकते हैं तो अंतर इतना सूक्ष्म नहीं है। –

+1

यह चींटी 1.8 के लिए काम नहीं करता है, ऐसा लगता है कि कुछ भी नहीं हुआ। – CCC

1

एक ठीक बिंदु: चींटी केवल उप-निर्देशिकाओं की प्रतिलिपि बनायेगी यदि स्रोत फाइलें गंतव्य फ़ाइलों से नई हैं। [1] मेरे मामले में, उप-डीआईआर की प्रतिलिपि नहीं बनाई जा रही थी (मैं verbose = "true" का उपयोग कर रहा हूं), क्योंकि इसमें कोई बदलाव नहीं था और वे पहले ही गंतव्य में थे। आप इसे मजबूर करने के लिए "ओवरराइट" का उपयोग कर सकते हैं, या अपने स्रोत उप-डीआईआर में कुछ फ़ाइलों को स्पर्श कर सकते हैं।

10

निर्देशिका सहित सामग्री कॉपी करें।

<copy todir="${dest.dir}" > 
    <fileset dir="${src.dir.parent}" includes="${src.dir}/**"/> 
</copy> 
+1

यह सबसे संक्षिप्त विकल्प है। http://ant.apache.org/manual/Types/fileset.html भी देखें। – Jess

0

इस कोड को फ़ोल्डर और साथ ही इसकी सामग्री को प्रतिलिपि बनाना चाहिए। यह मैन्युअल पथ पार्सिंग करने से बचने के लिए बेसनाम कार्य का भी उपयोग करता है।

<project name="Build" default="doCopy"> 
    <property name="source.dir" value="SourceDirPathGoesHere"/> 
    <property name="dest.dir" value="DestinationDirPathGoesHere"/> 
    <target name="doCopy"> 
    <basename property="source.dir.base.name" file="${source.dir}"/> 
    <copy todir="${dest.dir}"> 
     <fileset dir="${source.dir}/.." includes="${source.dir.base.name}/**"/> 
    </copy> 
    </target> 
</project> 
0

मैं अंत में निम्नलिखित कोड

<copy todir="${root.dir}/dist/src"> 
       <fileset dir="${root.dir}/build/src" includes="**"/> 
      </copy> 

का उपयोग कर इस जिले का निर्माण करने से src फ़ोल्डर की प्रतिलिपि होगा की नकल की।

उम्मीद है कि यह किसी की मदद करेगा।

1

मैं सभी सबफ़ोल्डर की प्रतिलिपि बनाने के लिए एक और सामान्य पैटर्न जोड़ रहा हूं।

<copy todir="${dest.dir}" > 
    <fileset dir="${src.dir}" includes="**/*"/> 
</copy> 

विवरण के लिए Patterns देखें।

1

मैंने निर्देशिका के अंदर individul jar फ़ाइलों की प्रतिलिपि बनाने के लिए मेरे build.xml फ़ाइल में नीचे कोड स्निपेट में दिखाए गए टैग शामिल किए हैं।

<target name="devInstall" depends="generateXsl" description="testing"> 
<copy flatten="true" todir="${test}/WEB-INF/lib" overwrite="${overwrite}"> 
       <fileset refid="buildJars"/> 
       <fileset dir="lib"> 
        <include name="commons-collections-*.jar"/> 
        <include name="commons-io-*.jar"/>    
        <include name="kodo/*.jar"/> 
        <include name="mail*.jar"/>  
        <include name="activation*.jar"/>    
        <include name="guava*.jar"/> 
        <include name="jna*.jar"/>       
       </fileset>   
      </copy> 
</target> 
1

एक और चींटी कार्य Copydir है। यहां का मुख्य भाग उस निर्देशिका का नाम शामिल करना है जिसे आप dest निर्देशिका के बाद प्रतिलिपि बनाना चाहते हैं। उप-निर्देशिकाओं और फ़ाइलों को स्वचालित रूप से कॉपी किया जाएगा।

<target name="-post-jar"> 
    <copydir src="config" dest="${dist.dir}/config/"/> 
</target> 
+0

आपके लिंक से: ** यह कार्य को हटा दिया गया है। इसके बजाय प्रतिलिपि कार्य का उपयोग करें। ** – Jim