更改文件或指定目录中所有文件的权限。目前它仅在 Unix 或 NonStop 内核(Tandem)下有效。权限也采用 UNIX 样式,类似于 chmod 命令的参数。
有关如何包含/排除文件以及如何编写模式的信息,请参阅有关 基于目录的任务 的部分。
此任务包含一个隐式 FileSet,并直接支持 FileSet 的所有属性和嵌套元素。可以使用嵌套的 <fileset>
或 <dirset>
(自 Apache Ant 1.6 起)元素指定更多集合。
自 Ant 1.6 起,此任务还支持嵌套的 filelist。
自 Ant 1.7 起,此任务支持任意 资源集合 作为嵌套元素。
默认情况下,此任务将使用底层 chmod 命令的单个调用。如果您正在处理大量文件,这可能会导致命令行过长,超出您的操作系统的限制。如果您遇到此类问题,应将此任务的 maxparallel 属性设置为非零值。要使用的数字高度取决于您的文件名长度(您的目录树的深度)和您的操作系统,因此您需要进行一些实验。POSIX 建议命令行长度限制至少为 4096 个字符,这可以为您提供一个近似值,您可以将其用作这些实验的初始值。
默认情况下,此任务除非检测到它正在 Unix 系统上运行,否则不会执行任何操作。如果您确定您的 PATH
上有一个与 Unix 命令兼容的命令行 chmod 可执行文件,您可以使用任务的 os 属性并将它的值设置为您的当前操作系统。
有关平台无关的替代方案,请参阅 setpermissions 任务。
属性 | 描述 | 必需 |
---|---|---|
file | 必须更改其权限的文件或单个目录。 | 两者之一,除非指定了嵌套的 <fileset|filelist|dirset> 元素 |
dir | 包含必须更改其权限的文件的目录。 注意:出于向后兼容性的原因, <chmod dir="some-dir"/> 仅会更改 some-dir 的权限,而不会递归到其中,除非您还指定了任何模式。 |
|
perm | 新的权限。 | 是 |
includes | 必须包含的文件模式的逗号或空格分隔列表。 | 否;默认为所有(**) |
excludes | 必须排除的文件模式的逗号或空格分隔列表。 | 否;默认为默认排除项,或者如果 defaultexcludes 为 no则为无 |
defaultexcludes | 指示是否应使用默认排除项 (yes|no)。 |
否;默认为 yes |
parallel | 使用单个 chmod 命令处理所有指定的文件。 | 否;默认为 true |
type | file、 dir或 both之一。如果设置为 file,则仅更改普通文件的权限。如果设置为 dir,则仅考虑目录。 注意:type 属性不适用于嵌套的 dirset ——dirset 始终隐式地假定 type 为 dir。 |
否;默认为 file |
maxparallel | 通过一次最多传递这么多源文件来限制并行程度。将其设置为负整数表示无限制。自 Ant 1.6 起。 | 否;默认为无限制 |
verbose | 是否在执行后打印摘要。自 Ant 1.6 起。 | 否;默认为 false |
os | 可以在其上执行命令的操作系统列表。 | 否 |
osfamily | 在 <os> 条件中使用的操作系统系列。 | 否;默认为 unix |
使 start.sh 文件对 UNIX 系统上的任何人可读和可执行。
<chmod file="${dist}/start.sh" perm="ugo+rx"/>
使 start.sh 文件仅对 UNIX 系统上的所有者可读、可写和可执行。
<chmod file="${dist}/start.sh" perm="700"/>
使 ${dist}/bin 下的所有 .sh 文件对 UNIX 系统上的任何人可读和可执行。
<chmod dir="${dist}/bin" perm="ugo+rx" includes="**/*.sh"/>
使 shared/sources1 下的所有文件(除了任何名为 trial 的目录下的文件)对 UNIX 系统上的同一组的成员可写。此外,属于 id 为 other.shared.sources 的 FileSet 的所有文件都获得相同的权限。
<chmod perm="g+w"> <fileset dir="shared/sources1"> <exclude name="**/trial/**"/> </fileset> <fileset refid="other.shared.sources"/> </chmod>
阻止非所有者访问 cgi
脚本、扩展名为 .old 的文件或以 private_ 开头的目录。以 .old 结尾的目录或以 private_ 开头的文件将不受影响。
<chmod perm="go-rwx" type="file"> <fileset dir="/web"> <include name="**/*.cgi"/> <include name="**/*.old"/> </fileset> <dirset dir="/web"> <include name="**/private_*"/> </dirset> </chmod>
某些 shell 对命令行可以包含的字符数有限制。此最大限制因 shell 而异,也因操作系统而异。如果要更改大量文件的模式,请考虑使用 maxparallel 属性。例如,当使用 AIX 并达到限制时,系统会发出警告:"Warning: UNIXProcess.forkAndExec native error: The parameter or environment lists are too long"
。大约 300 的值似乎会导致可以接受的命令行。