如何在Ant复制期间删除一个文件夹

cra*_*ish 7 ant

我有一个文件,其文件路径如"LibraryX/A/Stuff/FileY.txt",我在Ant构建中使用它作为includefile.但是,我需要在复制过程中删除路径的"LibraryX/A /"部分:文件从"LibraryX/A/Stuff/FileY.txt"复制并登陆到"Stuff/FileY.txt" ".我已经研究了几个regexpmap,但根本没有取得任何成功.:/

这样做的目的是目标文件夹可以覆盖"Stuff/MoreStuff"中的自定义文件,我想使用overwrite ="false"来保持磁盘访问最小化并保持自定义文件不变.

蚂蚁:

<copy todir="C:/targetdir/" overwrite="false">
    <fileset dir="C:/sourcedir/">
        <includesfile name="C:/targetdir/includes.file" />
    </fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)

Includes.file:

LibraryX/A/Stuff/FileA.txt
LibraryX/A/Stuff/FileB.txt
LibraryX/A/Stuff/FileC.txt
LibraryX/A/Stuff/FileY.txt
Run Code Online (Sandbox Code Playgroud)

Sourcedir:

sourcedir/LibraryX/A/Stuff/FileA.txt
sourcedir/LibraryX/A/Stuff/FileB.txt
sourcedir/LibraryX/A/Stuff/FileC.txt
sourcedir/LibraryX/A/Stuff/FileY.txt
Run Code Online (Sandbox Code Playgroud)

目标目录:

targetdir/Stuff/FileY.txt
Run Code Online (Sandbox Code Playgroud)

现在,sourcedirStuff -folder中的所有文件都应该以targetdir中的Stuff -folder 结尾.但是怎么样?

额外:如果我从"targetdir/LibraryX/A/Stuff"移动文件,它们将覆盖"targetdir/Stuff"文件夹中的所有内容,即使使用overwrite ="false".大概是因为它们是比目前Stuff文件夹中的文件更新的文件.

注意:我当然可以将自定义文件从目标目录移开,复制内容然后再移动自定义文件,覆盖新文件.但这会大量访问磁盘,从而减慢了进程.

Chr*_*isH 7

从Ant v1.8.2开始,您可以使用cutdirsmapper从文件路径中删除一些前导目录.请参阅映射器类型文档的最底部.

<copy todir="C:/targetdir/" overwrite="false">
    <fileset dir="C:/sourcedir/">
        <includesfile name="C:/targetdir/includes.file" />
    </fileset>
    <cutdirsmapper dirs="2"/>
</copy>
Run Code Online (Sandbox Code Playgroud)

额外奖励:您可以使用touch ant任务使targetdir中的所有文件都比所有源文件更新,从而防止它们被覆盖.