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.