Antを使用してディレクトリをコピーする方法


99

copydirディレクトリツリーをコピーするために使用しましたが、非推奨です。私のディレクトリにはいくつかのサブディレクトリが含まれており、それらのいくつかはファイルを含み、他はより多くのサブディレクトリを含んでいます。

ツリー全体をコピーするにはどうすればよいですか?


5
再帰的なコピーをしたいようです。そして、それがOmnipresentが提供したソリューションです。「再帰的」という単語が質問に表示された場合、より多くの人々がこの質問を見つける可能性があります。
Jason

回答:


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

それがあなたが望むことをすると信じています...(再帰的なコピーが行われました)


3
明らかに、includesすべてが必要な場合は不要です(ユーザーs1nの回答を参照)
Abel

40
これにより、{
src.dir

コピーはしませんでしたが、内容です。
A-Live

あなたは受け入れられた答えなので、あなたはそれを正しい答えになるように修正するかもしれません(その答えは正解です);-)
クリスチャンフリース

私はSOのアイデアが集団キュレーションであることを集めています。そのため、だれでも他のユーザーの質問を編集できます(編集レビューをスキップするには、多くの担当者が必要です)。
Andrew Spencer

117

ディレクトリ自体を含むコンテンツをコピーします。

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

注:$ {src.dir}は$ {src.dir.parent}からの相対パスであり、絶対パスではありません


12
これは正しい答えです。もう1つの答えは、「Antを使用してディレクトリの内容をどのようにコピーするか」という質問です。微妙な違いがあります。
cmcginty 2013年

「これは正しい答えになるはずです」:もちろん、予想されるパス名でリソースをロードできない場合、違いはそれほど微妙ではありません。
ジムピバルスキ2013

1
ant 1.8では機能しません。何も起こらなかったようです。
CCC 2016年

8
@CCCは$ {src.dir}が$ {src.dir.parent} に対して相対的であり、フルパスではないことを確認します
Mike Demenok

非常にどのように誤解x.parentされないようになっているparentx... -_-
nonchip

25

ディレクトリを指定するだけです(includesプロパティを除きます)。

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

詳細と例については、マニュアルを参照してください。


13
@ s1nこのコマンドは、src_dirの内容を../new/dirにコピーするだけで、src_dirにはコピーしません。src_dir(ディレクトリ)を別の場所にコピーするにはどうすればよいですか?
ピパラヤンナヤク


2

細かい点:ソースファイルが宛先ファイルより新しい場合にのみ、antはサブディレクトリをコピーします。 [1]私の場合、変更がなく、それらがすでに宛先にあったため、サブディレクトリはコピーされていません(私はverbose = "true"を使用しています)。「上書き」を使用して強制するか、ソースのサブディレクトリ内のファイルの一部を変更できます。


2

以下のコードスニペットに示すように、build.xmlファイルのincludeタグを使用して、個別のjarファイルをディレクトリ内にコピーしました。

<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

ここの例から、コピータスクを使用して単純なAntファイルを作成できます。

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

これにより、内部のすべてsrc_dir(それを除く)がにコピーされnew/dirます。


6
これはディレクトリの内容をコピーするだけです。直接含む内容ではありません。:(
ghostCoder

1

すべてのサブフォルダーをコピーする、より一般的なパターンを追加しています。

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

詳細については、パターンを参照してください。


1

別のantタスクはCopydirです。ここで重要なのは、destディレクトリの後にコピーするディレクトリの名前を含めることです。サブディレクトリとファイルは自動的にコピーされます。

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

あなたのリンクから:このタスクは廃止されました。代わりにコピータスクを使用してください。
ジム

0

このコードは、フォルダとその内容をコピーする必要があります。また、basenameタスクを使用して、手動のパス解析を行う必要がないようにします。

<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

私は最終的に次のコードを使用してコピーしました

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

これにより、srcフォルダーがdistからビルドにコピーされます。

これが誰かを助けることを願っています。


それは文字通り逆にコピーするだろうと言っています:P
チップなし
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.