代码之家  ›  专栏  ›  技术社区  ›  Geo

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

  •  0
  • Geo  · 技术社区  · 15 年前

    假设我用Ant从网络驱动器复制了一些文件:

    <copy todir="." verbose="true">
       <fileset dir="some_directory" includes="**/*"/>
    </copy>
    

    假设我首先测试文件夹是否存在。

    <available file="${dir.local}" property="dir.exists"/>
    

    如果我的计算机上有文件夹,我只想复制修改过的文件。有没有任何方法可以保持up2date与服务器上存在的版本一致?

    编辑:我知道同步任务。问题是,如果修改了本地文件,则同步不会复制它们。有没有办法改变这种行为,或者有其他的任务可以做到这一点?

    edit2:下面是根据Peter的建议修改的代码:

    <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 回复  |  直到 14 年前
        1
  •  3
  •   martin clayton egrunin    14 年前

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

    一种方法是 write your own Ant Task 扩展 Copy 任务和覆盖 copySingleFile 它检查时间戳:

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

    蚂蚁 copy 除非源较新,否则不会覆盖现有文件:

    默认情况下,只有当源文件比目标文件新或目标文件不存在时,才会复制文件。但是,可以使用 覆盖 属性。

    使用 preservelastmodified 以确保时间戳匹配。

        2
  •  7
  •   Huseyin Ozballar    14 年前

    由于ApacheAnt1.6,您可以使用同步任务来同步文件夹。 例子:

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

    参观 http://ant.apache.org/manual/Tasks/sync.html 更多信息。

    推荐文章