Chown

自 Apache Ant 1.6 起.

描述

更改文件或指定目录中所有文件的拥有者。目前,它仅在 Unix 下有效。owner 属性等效于 chown 命令的相应参数。

可以使用嵌套的 <fileset><dirset><filelist> 元素来指定 FileSetDirSetFileList

自 Ant 1.7 起,此任务支持任意 资源集合 作为嵌套元素。

默认情况下,此任务将使用单个底层 chown 命令调用。如果您正在处理大量文件,这可能会导致命令行过长,超出您的操作系统限制。如果您遇到此类问题,应将此任务的 maxparallel 属性设置为非零值。要使用的数字高度依赖于您的文件名长度(您的目录树的深度)和您的操作系统,因此您需要进行一些实验。POSIX 建议命令行长度限制至少为 4096 个字符,这可以为您提供一个近似值,您可以将其用作这些实验的初始值。

默认情况下,此任务除非检测到它正在 Unix 系统上运行,否则不会执行任何操作。如果您确定您的 PATH 上有一个 chown 可执行文件,该文件与 Unix 命令的命令行兼容,则可以使用任务的 os 属性并将它的值设置为您的当前操作系统。

参数

属性 描述 必需
file 必须更改其所有者的文件或目录。 是,除非指定了嵌套的 <fileset|filelist|dirset> 元素
owner 新的所有者。
parallel 使用单个 chown 命令处理所有指定的文件。 否;默认为 true
type “file”、“dir”或“both”之一。如果设置为“file”,则只更改普通文件的拥有者。如果设置为“dir”,则只考虑目录。
注意type 属性不适用于嵌套的 dirset——dirset 始终隐式地假定类型为 dir
否;默认为 file
maxparallel 通过一次最多传递这么多源文件来限制并行程度。将其设置为负整数表示无限制。 否;默认为无限制
verbose 是否在执行后打印摘要。 否;默认为 false
os 可以在其上执行命令的操作系统列表。
osfamily <os> 条件中使用的操作系统系列。 否;默认为 unix

示例

在 UNIX 系统上使 start.sh 文件属于 coderjoe

<chown file="${dist}/start.sh" owner="coderjoe"/>

在 UNIX 系统上使 ${dist}/bin 下的所有 .sh 文件属于 coderjoe

<chown owner="coderjoe">
  <fileset dir="${dist}/bin" includes="**/*.sh"/>
</chown>

在 UNIX 系统上使 shared/sources1 下的所有文件(除了任何名为 trial 的目录下的文件)属于 coderjoe。此外,属于具有 id=other.shared.sources 的 FileSet 的所有文件都将获得相同的拥有者。

<chown owner="coderjoe">
  <fileset dir="shared/sources1">
    <exclude name="**/trial/**"/>
  </fileset>
  <fileset refid="other.shared.sources"/>
</chown>

使 cgi 脚本、扩展名为 .old 的文件或以 private_ 开头的目录属于名为 webadmin 的用户。以 .old 结尾的目录或以 private_ 开头的文件将保持不受影响。

<chown owner="webadmin" type="file">
  <fileset dir="/web">
    <include name="**/*.cgi"/>
    <include name="**/*.old"/>
  </fileset>
  <dirset dir="/web">
    <include name="**/private_*"/>
  </dirset>
</chmod>