變更檔案或指定目錄內所有檔案的權限。目前僅在 Unix 或 NonStop Kernel (Tandem) 下有作用。權限也採用 UNIX 樣式,就像 chmod 指令的參數。
請參閱 目錄為基礎的任務 部分,了解如何包含/排除檔案,以及如何撰寫模式。
此任務包含一個隱含的 FileSet,並直接支援 FileSet 的所有屬性和巢狀元素。可以使用巢狀的 <fileset>
或 <dirset>
(自 Apache Ant 1.6 起) 元素指定更多組。
自 Ant 1.6 起,此任務也支援巢狀的 filelist。
自 Ant 1.7 起,此任務支援巢狀的任意 資源集合 作為巢狀元素。
預設情況下,此任務會單獨呼叫底層的 chmod 指令。如果您處理大量檔案,可能會導致命令列過長,超過作業系統的限制。如果您遇到此類問題,應將此任務的 maxparallel 屬性設定為非零值。要使用的數字高度取決於檔案名稱的長度 (目錄樹的深度) 和作業系統,因此您必須稍加嘗試。POSIX 建議命令列長度限制至少為 4096 個字元,這可能會為您提供一個近似值,可用作這些實驗的初始值。
預設情況下,此任務不會執行任何動作,除非它偵測到它在 Unix 系統上執行。如果您確定您的 PATH
中有一個 chmod 可執行檔,其命令列與 Unix 指令相容,您可以使用任務的 os 屬性,並將其值設定為您目前的作業系統。
請參閱 setpermissions 任務,以取得與平台無關的替代方案。
屬性 | 說明 | 必要 |
---|---|---|
file | 必須變更權限的檔案或單一目錄。 | 兩個屬性中必須有一個,除非指定巢狀的 <fileset|filelist|dirset> 元素 |
dir | 包含必須變更權限的檔案的目錄。 注意:出於向後相容性的原因, <chmod dir="some-dir"/> 僅會變更 some-dir 的權限,但不會遞迴進入其中,除非您也指定任何模式。 |
|
perm | 新的權限。 | 是 |
includes | 以逗號或空格分隔的必須包含檔案範本清單。 | 否;預設為全部 (**) |
排除 | 以逗號或空格分隔的必須排除檔案範本清單。 | 否;預設為預設排除或如果 defaultexcludes 為 no則為無 |
defaultexcludes | 表示是否應使用預設排除 (yes|no)。 |
否;預設為 yes |
平行 | 使用單一 chmod 命令處理所有指定的檔案。 | 否;預設為 true |
類型 | file、 dir或 both之一。如果設定為 file,則只會變更純文字檔案的權限。如果設定為 dir,則只會考慮目錄。 注意:類型屬性不適用於巢狀 dirset ,dirset 始終隱含假設類型為 dir。 |
否;預設為 file |
maxparallel | 透過一次傳遞最多這麼多個來源檔案來限制平行處理的數量。將其設定為負整數表示無限制。自 Ant 1.6 起。 | 否;預設為無限制 |
詳細 | 是否在執行後列印摘要。自 Ant 1.6 起。 | 否;預設為 false |
作業系統 | 可以在其上執行命令的作業系統清單。 | 否 |
作業系統系列 | 在 <os> 條件中使用的作業系統系列。 | 否;預設為 unix |
讓 UNIX 系統上的任何人可以讀取和執行 start.sh 檔案。
<chmod file="${dist}/start.sh" perm="ugo+rx"/>
讓 UNIX 系統上的所有人只能讀取、寫入和執行 start.sh 檔案。
<chmod file="${dist}/start.sh" perm="700"/>
讓 UNIX 系統上的任何人可以讀取和執行 ${dist}/bin 下的所有 .sh 檔案。
<chmod dir="${dist}/bin" perm="ugo+rx" includes="**/*.sh"/>
讓 UNIX 系統上 shared/sources1 下的所有檔案(除了 trial 目錄下的檔案)可以讓同一個群組的成員寫入。此外,屬於 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 時,如果達到限制,系統會回應警告:「警告:UNIXProcess.forkAndExec 原生錯誤:參數或環境清單過長」
。約 300 的值似乎會產生可接受的命令列。