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?

Sunil Kumar Sahoo
sumber
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)

Mahahadir
sumber
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

ery
sumber
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.

s1n
sumber
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
14

Salin konten termasuk direktori itu sendiri.

<copy todir="${dest.dir}" >  
  <fileset dir="${src.dir.parent}" includes="${src.dir}/**"/>
</copy>
cmcginty.dll
sumber
2
Ini adalah opsi paling ringkas. Lihat juga ant.apache.org/manual/Types/fileset.html .
Jess
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.

Jess
sumber
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>
Raman B
sumber
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.

NawaMan
sumber
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.

sartoris
sumber
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>
Andrei
sumber
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>
pengguna506069
sumber
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.

Dilip Rajkumar
sumber
secara harfiah mengatakan itu akan menyalin sebaliknya: P
nonchip