如何使用Ant同步两个文件夹?

时间:2010-03-10 18:20:35

标签: ant copy

假设我使用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>

然而,这会复制所有文件。它不仅取代了修改过的。

2 个答案:

答案 0 :(得分:7)

自Apache Ant 1.6起,您可以使用同步任务来同步文件夹。 例如:

    <sync todir="site">
      <fileset dir="genereted-site" />
    </sync>

访问http://ant.apache.org/manual/Tasks/sync.html了解详情。

答案 1 :(得分:3)

编辑:我可能错了,但我认为这样的任务不存在。

执行此操作的一种方法是write your own Ant Task扩展Copy任务并覆盖检查时间戳的copySingleFile

if (forceOverwrite || !destFile.exists()
    || (file.lastModified() - granularity > destFile.lastModified())) {

Ant copy不会覆盖现有文件,除非源是较新的:

  

默认情况下,仅在源文件比目标文件更新或目标文件不存在时才复制文件。但是,您可以使用覆盖属性显式覆盖文件。

使用preservelastmodified确保时间戳匹配。

相关问题