Chgrp

自 Apache Ant 1.6 起.

描述

更改文件或指定目录内所有文件的组。目前它仅在 Unix 下有效。组属性等同于 chgrp 命令的相应参数。

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

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

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

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

参数

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

示例

使 start.sh 文件在 UNIX 系统上属于 coders 组。

<chgrp file="${dist}/start.sh" group="coders"/>

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

<chgrp group="coders">
  <fileset dir="${dist}/bin" includes="**/*.sh"/>
</chgrp>

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

<chgrp group="coders">
  <fileset dir="shared/sources1">
    <exclude name="**/trial/**"/>
  </fileset>
  <fileset refid="other.shared.sources"/>
</chgrp>

使所有 .test.jsp.new 文件属于 webdev 组。以 test_ 开头的目录也将属于 webdev,但如果存在以 .new 结尾的目录名或以 test_ 开头的文件名,则它将不受影响。

<chgrp group="webdev" type="file">
  <fileset dir="/web">
    <include name="**/*.test.jsp"/>
    <include name="**/*.new"/>
  </fileset>
  <dirset dir="/web">
    <include name="**/test_*"/>
  </dirset>
</chmod>