Ant - 仅从树上的一个子目录复制文件和子目录

Dre*_*rew 6 ant

我想从单个子目录中使用Ant复制文件和子目录,而不复制其余的目录结构和内容.例如,我想复制dir_3,它的文件(file_1到file_n)和子目录(dir_4和dir_5),但不是dir_1和dir_2.有没有我可以用来做这个的模式?

temp
   \--dir_1
   \--dir_2
       |
       \--dir_3
           |
           \--dir_4
           \--dir_5
           \-- file_1
           |
           \--file_n
Run Code Online (Sandbox Code Playgroud)

谢谢.

Dav*_* W. 18

这并不困难......

<copy todir="${copy.dir}">
     <fileset dir="temp">
         <include name="**/dir3/**"/>
     </fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)

使用该include指令时,它只包含与您提供的模式匹配的文件.在这种情况下,我只复制那些/dir3/在其完整路径名中有某处的文件.这包括下的子目录和下的dir3所有文件dir3.

您可以使用该exclude指令覆盖include指令:

<copy todir="${copy.dir}">
     <fileset dir="temp">
         <include name="**/dir3/**"/>
         <exclude name="**/dir3/*"/>
     </fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)

这将复制这些子目录中的所有子目录和文件,但不复制dir3其自身下的文件.该*目录中的比赛中的所有文件,同时**将所有文件在整个目录树相匹配.

请注意,这将创建一个目录temp/dir2/dir3.如果我想temp/dir3,我必须将我的文件集设置为以下的父目录dir3:

<copy todir="${copy.dir}">
     <fileset dir="temp/dir2">
         <include name="dir3/**"/>
     </fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)

这样做:

<copy todir="${copy.dir}">
     <fileset dir="temp/dir2/dir3"/>
</copy>
Run Code Online (Sandbox Code Playgroud)

将创建一个目录temp下,直接与所有文件dir3直接下temp.也将有一个temp/dir4temp/dir5包含所有上述目录下的文件(和目录树)目录.