Cara menyalin direktori menggunakan Ant


99

Saya telah digunakan copydiruntuk menyalin pohon direktori tetapi sudah usang. Direktori saya berisi beberapa sub-direktori, dan beberapa di antaranya berisi file dan lainnya berisi lebih banyak sub-direktori.

Bagaimana cara menyalin seluruh pohon?


5
Sepertinya Anda ingin melakukan penyalinan rekursif. Dan itulah solusi yang Omnipresent berikan. Lebih banyak orang mungkin menemukan pertanyaan ini jika kata "rekursif" muncul dalam pertanyaan.
— Jason

Jawaban:


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

percaya itu akan melakukan apa yang Anda inginkan ... (Salinan rekursif selesai)


3
tampaknya, includesitu tidak perlu ketika Anda menginginkan semuanya (lihat jawaban oleh pengguna s1n )
— Abel

40
Ini menyalin konten {src.dir}, tetapi bukan direktori sebenarnya
— cmcginty

Salinan bukan lakukan tetapi isinya.
— A-Live

Karena Anda adalah jawaban yang diterima, Anda dapat memperbaikinya menjadi jawaban yang benar (jawaban ery benar) ;-)
— Christian Fries

Saya menyimpulkan bahwa gagasan SO adalah kurasi kolektif, itulah sebabnya siapa pun dapat mengedit pertanyaan orang lain (meskipun Anda membutuhkan banyak perwakilan untuk melewati edit review).
— Andrew Spencer

117

Salin konten termasuk direktori itu sendiri.

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

Catatan: $ {src.dir} relatif terhadap $ {src.dir.parent}, dan bukan path lengkap


12
ini harus menjadi jawaban yang BENAR. Jawaban lainnya adalah untuk pertanyaan "Bagaimana cara menyalin isi direktori menggunakan Ant". Ada perbedaan yang halus.
— cmcginty

"ini seharusnya jawaban yang BENAR": Tentu saja, meskipun perbedaannya tidak terlalu kentara saat Anda tidak dapat memuat sumber daya dengan nama jalur yang diharapkan.
— Jim Pivarski

1
tidak bekerja untuk ant 1.8, sepertinya tidak ada yang terjadi.
— CCC

8
@CCC memastikan $ {src.dir} relatif terhadap $ {src.dir.parent}, dan bukan jalur lengkap
— Mike Demenok

sangat menyesatkan bagaimana x.parentseharusnya TIDAK MENJADI parentdari x... -_-
— nonchip

25

Anda hanya perlu menentukan direktori (tanpa properti termasuk):

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

Lihat manual untuk lebih jelasnya dan contoh.


13
@ s1n Perintah ini hanya menyalin semua konten src_dir ke ../new/dir dan bukan src_dir. Bagaimana cara menyalin src_dir (direktori) ke lokasi lain?
— Pipalayan Nayak


2

Poin bagus: ant hanya akan menyalin sub-direktori jika file sumber lebih baru dari file tujuan. [1] Dalam kasus saya, sub-direktori tidak sedang disalin (saya menggunakan verbose = "true"), karena tidak ada perubahan dan mereka sudah ada di tujuan. Anda dapat menggunakan "timpa" untuk memaksanya, atau menyentuh beberapa file di sub-direktori sumber Anda.


2

Saya menggunakan tag include seperti yang ditunjukkan pada potongan kode di bawah ini di file build.xml saya untuk menyalin file jar individu di dalam direktori.

<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

Dari contoh di sini , Anda dapat menulis file Ant sederhana menggunakan tugas salin.

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

Ini harus menyalin semua yang ada di dalamnya src_dir(tidak termasuk) ke new/dir.


6
ini hanya menyalin isi direktori. bukan isinya termasuk langsung. :(
— ghostCoder

1

Saya menambahkan pola yang lebih umum untuk menyalin semua subfolder.

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

Lihat Pola untuk detailnya.


1

Tugas semut lainnya adalah Copydir . Bagian kuncinya di sini adalah memasukkan nama direktori yang ingin Anda salin setelah direktori tujuan. Sub-direktori dan file akan disalin secara otomatis.

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

Dari link Anda: Tugas ini sudah tidak digunakan lagi. Gunakan tugas Salin sebagai gantinya.
— Jim

0

Kode ini harus menyalin folder beserta isinya. Ia juga menggunakan tugas nama dasar untuk menghindari keharusan melakukan penguraian jalur manual.

<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

Saya akhirnya menyalin menggunakan kode berikut

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

Ini akan menyalin folder src dari dist ke build.

Semoga ini bisa membantu seseorang.


secara harfiah mengatakan itu akan menyalin sebaliknya: P
— nonchip
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.