移动

描述

将文件移动到新的文件或目录,或将文件集合移动到新的目录。默认情况下,如果目标文件已存在,则会覆盖它。当 overwrite 关闭时,只有当源文件比目标文件更新,或者目标文件不存在时才会移动文件 - 请参阅 granularity 属性以了解 Ant 对“更新”的理解。

资源集合 用于选择要移动的一组文件。只支持基于文件系统的资源集合,包括 filesetfilelistpath。在 Apache Ant 1.7 之前,只支持 <fileset> 作为嵌套元素。要使用资源集合,必须设置 todir 属性。

从 Ant 1.6.3 开始,可以使用 file 属性移动(重命名)整个目录。如果 tofile 表示一个现有文件,或者在 todir 中存在同名目录,则操作将失败。

参数

属性 描述 必需
file 要移动的文件或目录 file 或至少一个嵌套资源集合元素之一
preservelastmodified 使移动后的文件具有与原始源文件相同的最后修改时间。(注意:在 Java 1.1 上被忽略) 否;默认为 false
tofile 要移动到的文件 使用 file 属性时,可以使用 tofiletodir。使用嵌套 fileset 时,如果 fileset 的大小大于 1,或者 fileset 中的唯一条目是目录,或者已经指定了 file 属性,则只允许使用 todir
todir 要移动到的目录
overwrite 即使目标文件更新,也覆盖现有文件 否;默认为 true
force 覆盖只读目标文件。从 Ant 1.8.2 开始 否;默认为 false
filtering 指示在移动期间是否应该进行标记过滤。有关过滤器工作原理的描述,请参见 filter 任务。
flatten 忽略源目录的目录结构,将所有文件复制到单个目录中,该目录由 todir 属性指定。请注意,您可以使用 flatten mapper 达到相同的效果 否;默认为 false
includeEmptyDirs 复制嵌套 FileSet(s) 中包含的空目录。 否;默认为 yes
failonerror 如果为 false,则记录警告消息,但不停止构建,当要复制的文件不存在,或者其中一个嵌套 fileset 指向不存在的目录,或者在移动过程中发生错误。 否;默认为 true
quiet 如果为 truefailonerrorfalse,则当要复制的文件不存在,或者其中一个嵌套 fileset 指向不存在的目录,或者在复制过程中发生错误时,不记录警告消息。从 Ant 1.8.3 开始 否;默认为 false
verbose 记录正在移动的文件。 否;默认为 false
encoding 在过滤复制文件时要假设的编码。从 Ant 1.5 开始 否;默认为默认 JVM 字符编码
outputencoding 写入文件时要使用的编码。从 Ant 1.6 开始 否;如果设置了 encoding,则默认为 encoding,否则默认为默认 JVM 字符编码
enablemultiplemappings 如果为 true,则任务将处理给定源路径的所有映射。如果为 false,则任务将只处理第一个文件或目录。此属性仅在存在 mapper 子元素时才相关。从 Ant 1.6 开始 否;默认为 false
granularity 在决定文件已过期之前要给出的毫秒级宽限期。这是必需的,因为并非所有文件系统都支持跟踪最后修改时间到毫秒级。如果源文件和目标文件位于具有不同时钟的独立机器上,这也可能有用。从 Ant 1.6 开始 否;默认值为 0 毫秒,或在 DOS 系统上为 2 秒
performGCOnFailedDelete 如果 Ant 无法删除文件或目录,它将重试操作一次。如果将此标志设置为 true,它将在重试删除之前执行垃圾回收。
将此标志设置为 true 已知可以解决 Windows 上的一些问题(在 Windows 上默认为 true),以及位于 NFS 共享上的目录树。从 Ant 1.8.3 开始
否;在 Windows 上默认为 true,在任何其他操作系统上默认为 false

作为嵌套元素指定的参数

mapper

您可以使用嵌套的 mapper 元素来定义文件名转换。<move> 使用的默认映射器是 identity

请注意,传递给映射器的源名称取决于您使用的资源集合。如果您使用 <fileset> 或任何其他提供基本目录的集合,则传递给映射器的名称将是相对于基本目录的相对文件名。在任何其他情况下,将使用源的绝对文件名。

filterchain

Move 任务支持嵌套的 FilterChain

如果在同一个 <move> 任务中使用 <filterset><filterchain> 元素,则首先处理所有 <filterchain> 元素,然后处理 <filterset> 元素。

示例

移动单个文件(重命名文件)

<move file="file.orig" tofile="file.moved"/>

将单个文件移动到目录

<move file="file.orig" todir="dir/to/move/to"/>

将目录移动到新目录

<move todir="new/dir/to/move/to">
  <fileset dir="src/dir"/>
</move>

或者,从 Ant 1.6.3 开始

<move file="src/dir" tofile="new/dir/to/move/to"/>

将一组文件移动到新目录

<move todir="some/new/dir">
  <fileset dir="my/src/dir">
    <include name="**/*.jar"/>
    <exclude name="**/ant.jar"/>
  </fileset>
</move>

将文件列表移动到新目录

<move todir="some/new/dir">
  <filelist dir="my/src/dir">
    <file name="file1.txt"/>
    <file name="file2.txt"/>
  </filelist>
</move>

".bak" 附加到目录中所有文件的名称。

<move todir="my/src/dir" includeemptydirs="false">
  <fileset dir="my/src/dir">
    <exclude name="**/*.bak"/>
  </fileset>
  <mapper type="glob" from="*" to="*.bak"/>
</move>