2010-11-19 12 views
5

私は10年近く使ってきましたが、たぶん私は私の普通の経験を超えて何かをする必要があります。新しいディレクトリ「myInstanceの」に、ディレクトリ「例」に複数のディレクトリ(および内容)をワンショットでコピーする

コピーし、いくつかのサブディレクトリ(とその内容):この1は、明白な答えを欠いていた(と直感的なアプローチは行き止まりにつながっ)

問題。明確にするには、ソースディレクトリ内のすべてのサブディレクトリではなく一部をコピーします。

ソースディレクトリ:

example/ 
    ignoreThisDirectory/ 
    ignoreThisOneAlso/ 
    lib 
    etc/ 
    webapps/ 

試み:デッドエンド 最初にこの試みが働くように見えました。 lib、etc、webappsというサブディレクトリが作成されました。しかし、「コピー」はその内容をコピーしませんでした。空のサブディレクトリが残っていました。

答えて

8

あなたが指定することができ、事前に

<copy todir="myInstance/etc"> 
    <fileset dir="example/etc"/> 
    </copy>  
    <copy todir="myInstance/lib"> 
    <fileset dir="example/lib" /> 
    </copy>  
    <copy todir="myInstance/webapps"> 
    <fileset dir="example/webapps" /> 
    </copy>  

感謝:

<copy todir="myInstance" > 
    <dirset dir="example" includes="lib etc webapps"/>  
</copy>  

は成功しかし、最終的には 冗長、私は冗長と非DRYに思えるれ、個別に各ディレクトリをコピーする必要がありましたファイルセット内の複数の包含および除外ルール包含規則を指定しない場合、除外規則によって少なくとも1回は除外されているものを除き、デフォルトですべてが含まれます。

<property name="src.dir" value="example" /> 
<property name="dest.dir" value="myInstance" /> 

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

注指定された3「最先端」サブディレクトリのそれぞれの下で完全なディレクトリツリーにもたらす**ワイルドカード:

はここで包括的な例です。あなたは、特に、いくつかのディレクトリを除外したいのですが、他のすべてをコピーした場合あるいは、あなたはインクルージョンを省略するかもしれない(それによってデフォルトオールインクルーシブの動作を取得)し、除外リスト提供:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}"> 
     <exclude name="ignoreThisDir*/" /> 
     <exclude name="ignoreThisOne*/" /> 
    </fileset> 
</copy> 

あなたはさらに可能性を

<exclude name="ignore*/" /> 
+0

私は代わりにあなたがコピーしたいものをリストするためにインクルードを使用したいと思います。 – JasonMArcher

関連する問題