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

时间:2011-04-28 14:40:37

标签: ant

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

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

蚂蚁:

<copy todir="C:/targetdir/" overwrite="false">
    <fileset dir="C:/sourcedir/">
        <includesfile name="C:/targetdir/includes.file" />
    </fileset>
</copy>

Includes.file:

LibraryX/A/Stuff/FileA.txt
LibraryX/A/Stuff/FileB.txt
LibraryX/A/Stuff/FileC.txt
LibraryX/A/Stuff/FileY.txt

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

目标目录:

targetdir/Stuff/FileY.txt

现在,位于 sourcedir Stuff - 文件夹中的所有文件都应该以#em> targetdir中的 Stuff 文件夹结尾。但是如何?

奖励:如果我从“targetdir / LibraryX / A / Stuff”移动文件,它们将覆盖“targetdir / Stuff”文件夹中的所有内容,即使使用overwrite =“false”也是如此。大概是因为它们比目前Stuff文件夹中的文件更新。

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

1 个答案:

答案 0 :(得分:7)

从Ant v1.8.2开始,您可以使用cutdirsmapper从文件路径中删除一些前导目录。请参阅mapper type docs的最底部。

<copy todir="C:/targetdir/" overwrite="false">
    <fileset dir="C:/sourcedir/">
        <includesfile name="C:/targetdir/includes.file" />
    </fileset>
    <cutdirsmapper dirs="2"/>
</copy>

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