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.