Ant -- copying files and subdirectories from only one subdirectory on a tree
<copy todir="${copy.dir}">
<fileset dir="temp">
<include name="**/dir3/**"/>
</fileset>
</copy>
When you use the include
directive, it will only include the files that match the pattern you give it. In this case, I'm copying only those files that have /dir3/
somewhere in their full path name. This includes sub-directories under dir3
and all files under dir3
.
You can use the exclude
directive to override the include
directives:
<copy todir="${copy.dir}">
<fileset dir="temp">
<include name="**/dir3/**"/>
<exclude name="**/dir3/*"/>
</fileset>
</copy>
This will copy all sub-directories and files in those sub directories, but not the files under dir3
itself. The *
matches all files in the directory while **
matches the all the files in the entire directory tree.
Notice this will create a directory temp/dir2/dir3
. If I want temp/dir3
, I have to set my fileset to the parent directory of dir3
:
<copy todir="${copy.dir}">
<fileset dir="temp/dir2">
<include name="dir3/**"/>
</fileset>
</copy>
Doing this:
<copy todir="${copy.dir}">
<fileset dir="temp/dir2/dir3"/>
</copy>
Will create a directory temp
with all the files directly under dir3
directly under temp
. There will also be a temp/dir4
and temp/dir5
directory containing all the files (and directory trees) under those directories.