Ant kullanarak bir dizin nasıl kopyalanır


99

copydirBir dizin ağacını kopyalamak için kullandım , ancak kullanımdan kaldırıldı. Dizinim bazı alt dizinler içerir ve bunlardan bazıları dosyalar içerirken diğerleri daha fazla alt dizin içerir.

Ağacın tamamını nasıl kopyalayabilirim?


5
Yinelemeli bir kopya yapmak istiyor gibisin. Ve Omnipresent'in verdiği çözüm budur. Soruda "yinelemeli" kelimesi göründüğünde daha fazla kişi bu soruyu bulabilir.
Jason

Yanıtlar:


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

bunun istediğinizi yapacağına inanın ... (Özyinelemeli kopyalama yapıldı)


3
görünüşe göre, includesher şeyi istediğinizde gerekli değildir (kullanıcı s1n'nin cevabına bakın )
Abel

40
Bu, {src.dir} dizininin içeriğini kopyalar, ancak gerçek dizini değil
cmcginty

Kopya değil ama içeriği.
Canlı

Kabul edilen yanıt siz olduğunuz için, doğru yanıt olması için bunu düzeltebilirsiniz (ery'nin yanıtı doğru) ;-)
Christian Fries

SO fikrinin kolektif küratörlük olduğunu anladım, bu yüzden herkes başka birinin sorusunu düzenleyebilir (yine de düzenleme incelemesini atlamak için çok sayıda temsilciye ihtiyacınız var).
Andrew Spencer

117

Dizinin kendisi dahil içeriği kopyalayın.

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

Not: $ {src.dir}, tam yol değil, $ {src.dir.parent} ile ilişkilidir


12
bu DOĞRU cevap olmalıdır. Diğer cevap ise "Ant kullanarak bir dizinin içeriğini nasıl kopyalarsınız" sorusudur. İnce bir fark var.
cmcginty

"Bu DOĞRU cevap olmalıdır": Kesinlikle, ancak kaynaklarınızı beklenen yol adlarıyla yükleyemediğinizde fark o kadar ince değildir.
Jim Pivarski

1
karınca 1.8 için çalışmıyor, hiçbir şey olmamış gibi görünüyor.
CCC

8
@CCC, $ {src.dir} 'in $ {src.dir.parent} ile göreli olduğundan ve tam bir yol olmadığından emin olun
Mike Demenok

çok nasıl yanıltıcı x.parentOLMAYACAKTIR gerekiyordu parentarasında x... -_-
nonchip

25

Yalnızca dizini belirtmeniz gerekir (içerir özelliği sans):

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

Daha fazla ayrıntı ve örnek için kılavuza bakın .


13
@ s1n Bu komut, src_dir'i değil, sadece src_dir'in tüm içeriğini ../new/dir dizinine kopyalar. Src_dir (dizin) 'i başka bir yere nasıl kopyalarız?
Pipalayan Nayak


2

İnce bir nokta: ant, alt dizinleri yalnızca kaynak dosyalar hedef dosyalardan daha yeniyse kopyalayacaktır. [1] Benim durumumda, alt dizinler kopyalanmıyordu (ben verbose = "true" kullanıyorum), çünkü hiçbir değişiklik yapılmamıştı ve zaten hedefte bulunuyorlardı. Zorlamak için "üzerine yaz" seçeneğini kullanabilir veya kaynak alt dizinlerinizdeki dosyalardan bazılarına dokunabilirsiniz.


2

Bir dizinin içine tek tek jar dosyalarını kopyalamak için build.xml dosyamda aşağıdaki kod parçacığında gösterildiği gibi include etiketleri kullandım.

<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

Buradaki örnekten , kopyalama görevini kullanarak basit bir Ant dosyası yazabilirsiniz.

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

Bu, içindeki her şeyi src_dir(hariç) klasörüne kopyalamalıdır new/dir.


6
bu sadece dizinin içeriğini kopyalamaktır. doğrudan dahil içerikler değil. :(
ghostCoder

1

Tüm alt klasörleri kopyalamak için daha genel bir kalıp ekliyorum.

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

Ayrıntılar için Modellere bakın.


1

Başka bir karınca görevi Copydir'dir . Buradaki anahtar kısım, kopyalamak istediğiniz dizinin adını hedef dizinden sonra eklemektir. Alt dizinler ve dosyalar otomatik olarak kopyalanacaktır.

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

Bağlantınızdan: Bu görev kullanımdan kaldırılmıştır. Bunun yerine Kopyala görevini kullanın.
Jim

0

Bu kod, klasörü ve içeriğini kopyalamalıdır. Ayrıca herhangi bir manuel yol ayrıştırma yapmak zorunda kalmamak için basename görevini kullanır.

<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

Sonunda aşağıdaki kodu kullanarak kopyaladım

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

Bu src klasörünü dist'den derlemeye kopyalayacaktır.

Umarım bu birine yardımcı olur.


tam anlamıyla tersini kopyalayacağını söylüyor: P
nonchip
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.