2011-06-21 9 views
6

ディレクトリ構造とコンテンツの残りの部分をコピーせずに、単一のサブディレクトリからファイルとサブディレクトリをコピーしたいとします。たとえば、dir_3とそのファイル(file_1〜file_n)とサブディレクトリ(dir_4とdir_5)はコピーしたいが、dir_1とdir_2はコピーしない。私はこれを行うために使用できるパターンがありますか?ツリー上の1つのサブディレクトリからのファイルとサブディレクトリのコピー

temp 
    \--dir_1 
    \--dir_2 
     | 
     \--dir_3 
      | 
      \--dir_4 
      \--dir_5 
      \-- file_1 
      | 
      \--file_n 

ありがとうございました。あなたがいる場合もあるDIRを真の上書き=を使用する必要があるかもしれませ

答えて

16

...

<copy todir="${copy.dir}"> 
    <fileset dir="temp"> 
     <include name="**/dir3/**"/> 
    </fileset> 
</copy> 

includeディレクティブを使用すると、指定したパターンに一致するファイルのみが含まれます。この場合、フルパス名のどこかに/dir3/のファイルしかコピーしていません。これにはdir3のサブディレクトリとdir3のすべてのファイルが含まれます。

あなたはincludeディレクティブ上書きするexcludeディレクティブを使用することができます。これはdir3自体の下にあるファイルこれらのサブディレクトリ内のすべてのサブディレクトリとファイルをコピーしませんが、

<copy todir="${copy.dir}"> 
    <fileset dir="temp"> 
     <include name="**/dir3/**"/> 
     <exclude name="**/dir3/*"/> 
    </fileset> 
</copy> 

を。 *はディレクトリ内のすべてのファイルと一致し、**はディレクトリツリー全体のすべてのファイルと一致します。

これはディレクトリtemp/dir2/dir3を作成します。

<copy todir="${copy.dir}"> 
    <fileset dir="temp/dir2/dir3"/> 
</copy> 

temp直下に直接dir3の下にあるすべてのファイルとディレクトリtempが作成されます:この行う

<copy todir="${copy.dir}"> 
    <fileset dir="temp/dir2"> 
     <include name="dir3/**"/> 
    </fileset> 
</copy> 

:私はtemp/dir3をしたい場合は、私はdir3の親ディレクトリに自分のファイルセットを設定する必要があります。これらのディレクトリの下にあるすべてのファイル(およびディレクトリツリー)を含むtemp/dir4temp/dir5ディレクトリもあります。

1
<copy todir="/some/path/foobar" verbose="true"> 
    <fileset dir="/some/path/temp/dir2" includes="**"/> 
</copy> 

ちょうど下のすべてのdirsとファイルを含むDIR2から始まるファイルセットを使用...

をコピーしたすべてのファイルをエコーする冗長=真そうでない場合は、既存のファイルをコピータスクによって上書きされることはありません、
属性がすでに存在するTODIRで指定されたそれはそれは難しいことではありません

関連する問題