假设我使用ant从网络驱动器复制一些文件:
<copy todir="." verbose="true">
<fileset dir="some_directory" includes="**/*"/>
</copy>
假设我先测试文件夹是否存在。
<available file="${dir.local}" property="dir.exists"/>
如果我的计算机上有该文件夹,我只想复制修改过的文件。有没有办法保持up2date与服务器上存在的版本?
编辑:我知道同步任务。问题是,如果我的本地文件被修改,同步不会复制它们。有没有办法绕过这种行为,还是有其他任务可以做到这一点?
EDIT2:这是根据彼得的建议修改的代码:
<target name="copy">
<echo>${dir.remote}</echo>
<copy todir="${dir.local}" verbose="true" overwrite="true"
preservelastmodified="true">
<fileset dir="${dir.remote}">
<include name="**/*"/>
</fileset>
</copy>
</target>
然而,这会复制所有文件。它不仅取代了修改过的。
答案 0 :(得分:7)
自Apache Ant 1.6起,您可以使用同步任务来同步文件夹。 例如:
<sync todir="site">
<fileset dir="genereted-site" />
</sync>
答案 1 :(得分:3)
编辑:我可能错了,但我认为这样的任务不存在。
执行此操作的一种方法是write your own Ant Task扩展Copy
任务并覆盖检查时间戳的copySingleFile
:
if (forceOverwrite || !destFile.exists()
|| (file.lastModified() - granularity > destFile.lastModified())) {
Ant copy
不会覆盖现有文件,除非源是较新的:
默认情况下,仅在源文件比目标文件更新或目标文件不存在时才复制文件。但是,您可以使用覆盖属性显式覆盖文件。
使用preservelastmodified
确保时间戳匹配。