चींटी का उपयोग करके निर्देशिका की प्रतिलिपि कैसे करें


99

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

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


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

जवाबों:


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

विश्वास करो कि तुम क्या चाहते हो जाएगा ... (पुनरावर्ती कॉपी)


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

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

नकल नहीं किया, लेकिन यह सामग्री है।
ए-लाइव

चूंकि आप स्वीकृत उत्तर हैं, इसलिए आप सही उत्तर बनने के लिए इसे सही कर सकते हैं (ery का उत्तर सही है;) ;-)
क्रिश्चियन फ्राइज़

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

117

निर्देशिका सहित सामग्री की प्रतिलिपि बनाएँ।

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

नोट: $ {src.dir} $ {src.dir.parent} के सापेक्ष है, और पूर्ण पथ नहीं है


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

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

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

8
@CCC $ {src.dir} को $ {src.dir.parent} के सापेक्ष सुनिश्चित करता है , और पूर्ण पथ नहीं
माइक डेमनोक

बहुत भ्रामक कैसे x.parentहोने वाले माना जाता है parentकी x... -_-
nonchip

25

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

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

अधिक विवरण और उदाहरणों के लिए मैनुअल देखें ।


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

14

निर्देशिका सहित सामग्री की प्रतिलिपि बनाएँ।

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

2
यह सबसे रसीला विकल्प है। Ant.apache.org/manual/Types/fileset.html भी देखें ।
जेस

2

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


2

मैंने अपनी बिल्ड.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

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

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

यह सब कुछ अंदर src_dir(इसे छोड़कर) को कॉपी करना चाहिए new/dir


6
यह निर्देशिका की सामग्री की प्रतिलिपि बना रहा है। सीधे सहित सामग्री नहीं। :(
घोस्टकोडर

1

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

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

देखें पैटर्न्स जानकारी के लिए।


1

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

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

आपके लिंक से: इस कार्य को हटा दिया गया है। इसके बजाय कॉपी कार्य का उपयोग करें।
जिम

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 फ़ोल्डर की नकल करेगा।

आशा है कि यह किसी की मदद करता है।


यह शाब्दिक रूप से कहता है कि यह दूसरे तरीके की नकल करेगा हालांकि: P
नॉनचिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.