如果文件在目标位置不存在则复制文件的 Ant 任务

use*_*609 4 ant build-automation build

是否有任何 Ant 任务仅在目标位置不存在文件时才将文件复制到目标位置?

gat*_*kin 7

有以下三种情况:

  1. 目标文件不存在。
  2. 目标文件存在但比源文件旧。
  3. 目标文件存在并且比源文件更新。

这个问题要求复制只在情况 1 中发生。默认情况下,复制发生在情况 1 和 2 中;将 overwrite 设置为 true 会使复制在所有三种情况下都发生。答案是使用present选择器:

<copy todir="dest">
  <fileset dir="src">
    <present present="srconly" targetdir="dest" />
  </fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)


Reb*_*bse -1

复制任务有一个覆盖属性,默认设置为 false。

overwrite = 覆盖现有文件,即使目标文件较新。必需=否;默认为 false。

因此,当 overwrite="false" (默认值)时,您可以完成复制任务,这意味着:

  <copy todir="../dest/dir">
    <fileset dir="src_dir">
      <exclude name="**/*.java"/>
    </fileset>
  </copy>
Run Code Online (Sandbox Code Playgroud)

或对于单个文件:

<copy file="myfile.txt" todir="../some/other/dir"/>
Run Code Online (Sandbox Code Playgroud)

完全符合您的要求。