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

How to copy all contents under one kind of directory in 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_1,dir_2,dir_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

这样的目录

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

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

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

[cutdirsmapper] strips a configured number of leading directories from the source file name.

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

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

在 运行 蚂蚁

之前
$ 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

运行蚂蚁

之后
$ 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 下。