【发布时间】:2015-03-26 18:36:53
【问题描述】:
我有一个源目录,其中包含一些我需要复制到我的网络应用程序目录中的文件更新。在将文件复制到位之前,我需要备份每个将被覆盖到备份的原始文件。我无法将整个 Web 应用程序备份到备份位置,因为那将是 00 的文件。我需要保持 dir 结构(没有展平)& 所有 3 个位置都具有相同的结构。
我目前的想法是分两个阶段进行。备份然后更新。更新很简单(复制和文件集)。备份给我带来了问题,因为我只想备份将要更新的文件。
以下是我当前的迭代(不起作用)...使用带有 todir 的副本作为备份位置,然后有一个搜索源文件的文件集,这样我就有了一组更改文件。我显然需要做的是更改文件集返回的文件的路径,以便它们引用现有文件而不是新文件,这就是我卡住的地方。任何人都知道如何更改文件集返回的文件的路径?我在下面使用了我知道是错误的 pathconvert,但我把它留在里面以显示我所追求的转换 - 有人知道该怎么做吗?或者更好的方法!
${backup.dir} --> root of file backup
${console.war} --> location of existing files - the top of the application dir
${update.dir} --> root of updated files
<copy todir="${backup.dir}/app/console.war">
<fileset dir="${update.dir}/app/console.war" includes="**" id="id.update.files"/>
<pathconvert refid="id.update.files" property="custom.file.target">
<map from="${update.dir}/app/console.war" to="${console.war}"/>
</pathconvert>
</copy>
【问题讨论】:
-
也许你应该使用像rsync这样的工具,它是为同步文件和做备份而设计的。如果您仍然希望在 Ant 脚本中控制所有内容,您可以使用
exec任务调用 rsync 来执行备份,然后再复制更新的文件。如果您不喜欢使用 rsync,请查看sync任务以在执行更新之前执行备份。
标签: ant