วิธีคัดลอกไดเรกทอรีโดยใช้ Ant


99

ฉันเคยcopydirคัดลอกแผนผังไดเร็กทอรี แต่เลิกใช้แล้ว ไดเร็กทอรีของฉันมีไดเร็กทอรีย่อยบางไดเร็กทอรีและบางไดเร็กทอรีมีไฟล์และอื่น ๆ มีไดเร็กทอรีย่อยเพิ่มเติม

ฉันจะคัดลอกต้นไม้ทั้งหมดได้อย่างไร?


5
ดูเหมือนว่าคุณต้องการทำสำเนาซ้ำ และนั่นคือทางออกที่ทั่วทุกมุมโลกมอบให้ ผู้คนจำนวนมากอาจพบคำถามนี้หากคำว่า "เรียกซ้ำ" ปรากฏในคำถาม
Jason

คำตอบ:


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

เชื่อว่าจะทำในสิ่งที่คุณต้องการ ... (ทำสำเนาซ้ำ)


3
เห็นได้ชัดว่าincludesไม่จำเป็นเมื่อคุณต้องการทุกอย่าง (ดูคำตอบโดยผู้ใช้s1n )
Abel

40
นี่เป็นการคัดลอกเนื้อหาของ {src.dir} แต่ไม่ใช่ไดเร็กทอรีจริง
cmcginty

สำเนาไม่ได้ทำ แต่เป็นเนื้อหา
A-Live

เนื่องจากคุณเป็นคำตอบที่ได้รับการยอมรับคุณอาจแก้ไขให้กลายเป็นคำตอบที่ถูกต้อง (คำตอบของ ery ถูกต้อง) ;-)
Christian Fries

ฉันรวบรวมว่าความคิดของ SO คือการดูแลจัดการโดยรวมซึ่งเป็นเหตุผลว่าทำไมใคร ๆ ก็สามารถแก้ไขคำถามของคนอื่นได้ (แม้ว่าคุณจะต้องการตัวแทนจำนวนมากเพื่อข้ามการตรวจสอบการแก้ไข)
Andrew Spencer

117

คัดลอกเนื้อหารวมถึงไดเร็กทอรีเอง

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

หมายเหตุ: $ {src.dir} สัมพันธ์กับ $ {src.dir.parent} ไม่ใช่เส้นทางแบบเต็ม


12
นี่ควรเป็นคำตอบที่ถูกต้อง คำตอบอื่น ๆ สำหรับคำถาม "คุณคัดลอกเนื้อหาของไดเรกทอรีโดยใช้ Ant ได้อย่างไร" มีความแตกต่างที่ลึกซึ้ง
cmcginty

"นี่ควรเป็นคำตอบที่ถูกต้อง": แน่นอนว่าแม้ว่าความแตกต่างจะไม่ชัดเจนนักเมื่อคุณไม่สามารถโหลดทรัพยากรของคุณด้วยชื่อพา ธ ที่คาดไว้
Jim Pivarski

1
มันใช้ไม่ได้กับ ant 1.8 ดูเหมือนไม่มีอะไรเกิดขึ้น
CCC

8
@CCC มั่นใจว่า $ {src.dir} สัมพันธ์กับ $ {src.dir.parent} ไม่ใช่เส้นทางแบบเต็ม
Mike Demenok

ทำให้เข้าใจผิดมากว่า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 (ไดเร็กทอรี) ไปยังตำแหน่งอื่นได้อย่างไร?
Pipalayan Nayak


2

จุดดี: มดจะคัดลอกไดเร็กทอรีย่อยก็ต่อเมื่อไฟล์ต้นทางใหม่กว่าไฟล์ปลายทาง [1]ในกรณีของฉัน dirs ย่อยไม่ได้ถูกคัดลอก (ฉันใช้ verbose = "true") เนื่องจากไม่มีการเปลี่ยนแปลงใด ๆ และอยู่ในปลายทางแล้ว คุณสามารถใช้ "เขียนทับ" เพื่อบังคับหรือแตะไฟล์บางไฟล์ในไดร์ซับซอร์สของคุณ


2

ฉันใช้แท็กรวมตามที่แสดงในส่วนข้อมูลโค้ดด้านล่างในไฟล์ build.xml ของฉันเพื่อคัดลอกไฟล์ jar ของตัวเองภายในไดเร็กทอรี

<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

จากตัวอย่างที่นี่คุณสามารถเขียนไฟล์ Ant ง่ายๆโดยใช้งานการคัดลอก

<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
นี่เป็นเพียงการคัดลอกเนื้อหาของไดเร็กทอรี ไม่รวมถึงเนื้อหาโดยตรง :(
ghostCoder

1

ฉันกำลังเพิ่มรูปแบบทั่วไปเพื่อคัดลอกโฟลเดอร์ย่อยทั้งหมด

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

ดูรูปแบบสำหรับรายละเอียด


1

งานมดก็คือCopydir ส่วนสำคัญในที่นี้คือการรวมชื่อของไดเร็กทอรีที่คุณต้องการคัดลอกหลังไดเร็กทอรีปลายทาง ไดเรกทอรีย่อยและไฟล์จะถูกคัดลอกโดยอัตโนมัติ

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

จากลิงค์ของคุณ: งานนี้เลิกใช้แล้ว ใช้งาน Copy แทน
จิม

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>

เพื่อ copy โฟลเดอร์ src จาก dist ไป build

หวังว่านี่จะช่วยใครบางคนได้


มันบอกอย่างแท้จริงว่ามันจะคัดลอกวิธีอื่น ๆ : P
nonchip
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.