如何在Ant复制期间剥离一个文件夹



我有一个文件,其中有像"LibraryX/a/Stuff/FileY.txt"这样的文件路径,我在Ant构建中使用它作为inclesfile。然而,我需要在复制过程中删除路径的"LibraryX/A/"部分:文件从"LibraryX/A/Stuff/FileY.txt"复制并降落到"Stuff/FileY.txt"。我已经研究了一些regexpmappers,但还没有取得任何成功。:/

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

Ant:

<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
目标dir:

targetdir/Stuff/FileY.txt

现在,Stuff -folder in sourcedir中的所有文件都应该以Stuff -folder in targetdir结束。但如何?

奖励:如果我从"targetdir/LibraryX/A/Stuff"中移动文件,它们将覆盖"targetdir/Stuff"文件夹中的所有内容,即使覆盖="false"。可能是因为它们是比当前"Stuff"文件夹中的文件更新的文件。

注意:当然,我可以将自定义文件从目标目录移开,复制这些内容,然后将自定义文件移回来,覆盖新的文件。但是这会访问磁盘很多次,减慢了进程。

从Ant v1.8.2开始,您可以使用cutdirsmapper从文件路径中删除一些主要目录。查看映射器类型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中的所有文件比所有源文件更新,从而防止它们被覆盖。

相关内容

  • 没有找到相关文章

最新更新