如何在ant中的一种目录下复制所有内容?

时间:2017-01-04 11:42:38

标签: ant

我想复制目录dir_java下的文件和子目录,但不复制dir_java目录本身及其所有父目录。 a.k.a我想在ant copy任务中将所有目录dir_com及其子目录都放到todir

有办法做到这一点吗?

temp
   \--dir_1
       |
       \--dir_java
           |
           \--dir_com
   \--dir_2
       |
       \--dir_java
           |
           \--dir_com
   \--dir_3
       |
       \--dir_foobar

dir_1dir_2dir_3

没有规律性

我在下面试过

    <copy todir="to_dir" verbose="true" overwrite="true">
        <fileset dir="temp" includes="*/dir_java/**" />
    </copy>

但我有to_dir/dir_1/dir_java/dir_com等目录。

我想要to_dir/dir_com

这样的目录

我最好的尝试是在上面的复制任务之后添加一个exec任务并调用cp命令,但仅适用于非Windows平台:

    <exec executable="/bin/sh">
        <arg value="-c"/>
        <arg value="cp -R to_dir/*/dir_java/* to_dir"/>
    </exec>

1 个答案:

答案 0 :(得分:1)

层次结构中的所有dir_java目录都处于同一级别吗?如果是,请考虑使用<cutdirsmapper> ...

  

[cutdirsmapper]从源文件名中删除配置数量的前导目录。

<cutdirsmapper>删除前导目录后,它将保留目录结构的任何剩余...

<copy todir="to_dir" verbose="true" overwrite="true">
    <fileset dir="temp" includes="*/dir_java/**" />
    <cutdirsmapper dirs="2" />
</copy>

在运行Ant之前

$ find . -type f
./temp/dir_1/dir_java/dir_com/1.txt
./temp/dir_2/dir_java/dir_com/2.txt
./temp/dir_3/dir_foobar/3.txt

运行Ant

之后
$ find . -type f
./temp/dir_1/dir_java/dir_com/1.txt
./temp/dir_2/dir_java/dir_com/2.txt
./temp/dir_3/dir_foobar/3.txt
./to_dir/dir_com/1.txt
./to_dir/dir_com/2.txt

注意在应用映射后,1.txt2.txt仍然在dir_com下。