我想复制目录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
我最好的尝试是在上面的复制任务之后添加一个exec任务并调用cp命令,但仅适用于非Windows平台:
<exec executable="/bin/sh">
<arg value="-c"/>
<arg value="cp -R to_dir/*/dir_java/* to_dir"/>
</exec>
答案 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>
$ 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.txt
和2.txt
仍然在dir_com
下。