指定されたディレクトリ内のファイルまたはすべてのファイルのパーミッションを変更します。 現時点では、UnixまたはNonStop Kernel(Tandem)でのみ有効です。パーミッションは、chmodコマンドの引数のように、UNIXスタイルです。
ファイルの包含/除外の仕組み、およびパターンの記述方法については、ディレクトリベースのタスクのセクションを参照してください。
このタスクは暗黙的なFileSetを保持しており、FileSetのすべての属性とネストされた要素を直接サポートします。ネストされた<fileset>または<dirset>(Apache Ant 1.6以降)要素を使用して、複数のセットを指定できます。
Ant 1.6以降、このタスクはネストされたfilelistもサポートします。
Ant 1.7以降、このタスクはネストされた要素として任意のリソースコレクションをサポートします。
デフォルトでは、このタスクは基盤となるchmodコマンドを1回だけ呼び出します。多数のファイルを処理する場合、コマンドラインがオペレーティングシステムにとって長すぎる可能性があります。このような問題が発生した場合は、このタスクのmaxparallel属性をゼロ以外の値に設定する必要があります。使用する数値は、ファイル名(ディレクトリツリーの深さ)とオペレーティングシステムの長さに大きく依存するため、少し実験する必要があります。POSIXでは、コマンドラインの長さの制限は少なくとも4096文字であることを推奨しています。これは、これらの実験の初期値として使用できる数値の目安になります。
デフォルトでは、このタスクはUnixシステムで実行されていることを検出しない限り、何もしません。PATHにUnixコマンドとコマンドライン互換性のあるchmod実行可能ファイルがあることが確実な場合は、タスクのos属性を使用して、その値を現在のOSに設定できます。
プラットフォームに依存しない代替手段については、setpermissionsタスクを参照してください。
| 属性 | 説明 | 必須 |
|---|---|---|
| file | パーミッションを変更する必要があるファイルまたは単一のディレクトリ。 | ネストされた<fileset|filelist|dirset>要素が指定されていない限り、この2つのうちのいずれか1つ。 |
| 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>条件で使用される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>
一部のシェルには、コマンドラインに含めることができる文字数に制限があります。この最大制限は、シェルやオペレーティングシステムによって異なります。モードを変更するファイルが多数ある場合は、maxparallel属性の使用を検討してください。たとえば、AIXを使用しており、制限に達すると、システムは次の警告で応答します。「"Warning: UNIXProcess.forkAndExec native error: The parameter or environment lists are too long"」。約300の値にすると、許容されるコマンドラインになります。