ftp
タスクは、ファイルの送受信、一覧表示、削除、ディレクトリの作成を行うことができる基本的な FTP クライアントを実装します。各タスクの実行方法の説明と例については、以下を参照してください。
注: このタスクは、Apache Ant ディストリビューションには含まれていない外部ライブラリに依存しています。詳細については、ライブラリの依存関係を参照してください。Ant での最適なサポートを受けるために、このライブラリの最新バージョンを入手してください。
ftp
タスクは、FTP サーバーで使用されているファイルシステムの種類を判断しようとします。サポートされているサーバーの種類は、Unix、NT、OS2、VMS、および OS400 です。さらに、Unix スタイルでディレクトリを表示するように構成された NT および OS400 サーバーも正しくサポートされています。それ以外の場合は、システムはデフォルトで Unix 標準を使用します。remotedir は、FTP サーバーで必要な構文で指定する必要があります。サーバーで通常の Unix 規則がサポートされていない場合は、separator を使用して、代わりに使用するファイル区切り文字を設定できます。
ファイルの包含/除外がどのように機能するか、およびパターンの記述方法については、ディレクトリベースのタスクのセクションを参照してください。
このタスクは現在、<setproxy>
タスクによって設定されたプロキシ情報を使用しておらず、socks 経由でファイアウォールを通過することはできません。
警告: newer 属性を使用した ftp
の「get」に関して、問題が報告されています。問題は、commons-net が予期しているものと ls -l の形式が異なることが原因である可能性があります。たとえば、FTP サーバーがディレクトリ一覧に使用する言語の特性が原因である可能性があります。このような問題が発生した場合は、FTP サーバーからのサンプルディレクトリ一覧(FTP プロンプトで ls -l)を含むメールを送信してください。
接続できるがアップロードまたはダウンロードできない場合は、passive 属性を「true」に設定して、サーバーが新しい接続をセットアップしようとする代わりに、既存の(開いている)チャネルを使用してみてください。
属性 | 説明 | 必須 |
---|---|---|
server | リモート FTP サーバーのアドレス。 | はい |
port | リモート FTP サーバーのポート番号。 | いいえ。デフォルトは「21」です。 |
userid | FTP サーバーで使用するログイン ID。 | はい |
password | FTP サーバーで使用するログインパスワード。 | はい |
account | FTP サーバーで使用するアカウント。Ant 1.7 以降。 | いいえ |
remotedir | FTP サーバー上のリモートディレクトリ。詳細な使用方法については、以下の表を参照してください。 | いいえ |
action | 実行する FTP アクション。現在、「put」、「get」、「del」、「list」、「chmod」、「mkdir」、「rmdir」、および「site」をサポートしています。 | いいえ。デフォルトは「send」です。 |
binary | バイナリモード(「yes」)またはテキストモード(「no」)転送を選択します。 | いいえ。デフォルトは「yes」です。 |
passive | パッシブモード(「yes」)転送を選択します。パフォーマンスは低下しますが、ファイアウォールを通過する接続が向上します。 | いいえ。デフォルトは「no」です。 |
verbose | 「yes」に設定されている場合、転送される各ファイルに関する情報を表示します。 | いいえ。デフォルトは「no」です。 |
depends | 「yes」に設定されている場合、新規または変更されたファイルのみを転送します。 | いいえ。デフォルトは「no」です。 |
newer | depends の同義語。timediffauto および timediffmillis を参照してください。 | いいえ |
timediffauto | Ant がクライアントとサーバー間の時間差を計算するように「true」に設定します。 リモートディレクトリへの書き込みアクセスが必要です。 Ant 1.6 以降 これが true に設定されている場合、Ant は 一時ディレクトリ 内に空のファイルを作成し、それをリモートサーバーに転送します。差が判明したら、両側でファイルを削除します。 |
いいえ |
timestampGranularity | 「MINUTE」または「NONE」のいずれかを指定します( を指定することもできます。これは値を指定しないことと同等であり、プロパティファイル駆動のスクリプトに役立ちます)。putおよび getにおける一般的な状況(ローカルファイルシステムのタイムスタンプは HH:mm:ss で、一般的な FTP サーバーのタイムスタンプは HH:mm です)をオーバーライドできます。これは、uptodate の計算を狂わせる可能性があります。ただし、デフォルト値はほとんどのアプリケーションで十分です。Ant 1.7 以降 |
いいえ。「put」(デフォルトは「MINUTE」)および「get」(デフォルトは「NONE」。preservelastmodified オプションがあるため、それほど必要ありません)にのみ適用されます。 |
timediffmillis | 非推奨。リモートマシンの時刻に加算してローカルマシンの時刻を取得するミリ秒数。timestampGranularity 属性(ほとんどの状況でデフォルト値で十分です)と serverTimeZoneConfig オプションを使用すれば、これは不要になります。serverTimeZoneConfig は計算を自動的に行い、夏時間も認識します。 Ant 1.6 以降 |
いいえ |
separator | FTP サーバーで使用されるファイル区切り文字を設定します。 | いいえ。デフォルトは「/」です。 |
umask | 新しいファイルのデフォルトのファイルアクセス許可を設定します(Unix のみ)。 | いいえ |
chmod | 新規または既存のファイルのファイルアクセス許可を設定または変更します(Unix のみ)。「put」アクションで使用すると、「chmod」は各ファイルに対して発行されます。 | いいえ |
listing | 「list」アクションの結果を書き込むファイル。 | はい、「list」アクションの場合。それ以外の場合は無視されます。 |
ignoreNoncriticalErrors | ディレクトリの作成中に一部のサーバー(特に wu-ftp)から送信される重大ではないエラーコードをタスクが無視できるようにするフラグ。 | いいえ。デフォルトは「false」です。 |
skipFailedTransfers | 失敗したファイルの「put」、「delete」、および「get」操作を警告付きでスキップし、残りのファイルを転送できるようにするフラグ。 | いいえ。デフォルトは「false」です。 |
preservelastmodified | コピーされたファイルに、元のソースファイルと同じ最終更新時刻を付与します(ファイルの取得にのみ適用されます)。 | いいえ。デフォルトは「false」です。 |
retriesAllowed | ファイル転送操作で許可される再試行回数を設定します。正の数を指定した場合、操作が失敗するまでに、各ファイル転送はその回数まで失敗する可能性があります。「-1」または「forever」を指定した場合、操作は成功するまで試行を続けます。 | いいえ。デフォルトは「0」です。 |
siteCommand | action 属性が「site」として指定されている場合に実行する、サーバー固有の SITE コマンドを設定します。 | いいえ |
initialSiteCommand | ログイン直後に実行する、サーバー固有の SITE コマンドを設定します。 |
いいえ |
enableRemoteVerification | データ接続が制御接続と同じホストに接続することを確認する必要があるかどうか。これはデフォルトで有効になっているセキュリティ対策ですが、特定のファイアウォールシナリオでは無効にすることが役立つ場合があります。Ant 1.8.0 以降 | いいえ。デフォルトは「true」です。 |
dataTimeout | データ接続でデータを待機するときに使用されるタイムアウト(ミリ秒単位)を設定します。値 0 は無限タイムアウトを意味します。Ant 1.10.7 以降 | いいえ |
wakeUpTransferInterval | 必要な場合にのみ使用します。LIST コマンドがデータ接続をトリガーする間隔(秒単位)(ftp サーバーによるデータ接続なしのタイムアウトを回避するため)。Ant 1.10.7 以降 | いいえ |
以下の属性には、jakarta-commons-net-1.4.0 以降が必要です。 以下の理由により、標準オプションが機能しない場合は、これらのオプションを使用します。
これらのいずれも指定されていない場合、FTP ビルドスクリプトがプロパティファイルで構成されているプロパティファイルベースの開発を支援するために、これらの属性のいずれについても、値 は指定しないことと同等です。 これらのオプションは自動検出スキームと互換性がないことを理解してください。これらのオプションのいずれかが指定されている場合( 以外の値で)、システムタイプを選択する必要があります。また、systemTypeKey が指定されていない場合は、UNIX が想定されます。この背後にある考え方は、これらのオプションは非標準形式を設定するためのものであり、自分が扱っているシステムを知っているビルドスクリプトの作成者は、どのオプションを設定する必要があるかを知っているということです。そうでない場合は、これらのオプションはそのままにしておく必要があります。デフォルトの自動検出スキームを使用でき、ほとんどの場合に機能します。 |
||
systemTypeKey | サーバーで使用されているシステムのタイプを指定します。サポートされている値は、「UNIX」、「VMS」、「WINDOWS」、「OS/2」、「OS/400」、「MVS」です。指定されていない場合(または として指定されている場合)、および他の xxxConfig 属性が指定されていない場合、FTP SYST コマンドに基づく自動検出メカニズムが使用されます。Ant 1.7 以降 |
いいえ。ただし、以下の xxxConfig 属性のいずれかが指定されている場合は、 がここで指定されていても、UNIX が想定されます。 |
serverTimeZoneConfig | Java TimeZone 識別子(例:「GMT」、「America/Chicago」、「Asia/Jakarta」)として、タイムスタンプにサーバーが使用するタイムゾーンを指定します。これにより、サーバーがクライアントと異なるタイムゾーンにある場合でも、タイムスタンプの依存関係チェックが可能になります。タイムゾーンは夏時間についても認識しており、ミリ秒の差を計算する必要はありません。指定されていない場合(または として指定されている場合)、クライアントのタイムゾーンが想定されます。 Ant 1.7 以降 |
いいえ |
defaultDateFormatConfig | Java SimpleDateFormat 表記(例:「yyyy-MM-dd」)で、日付を解析するために FTP サーバーで一般的に使用される日付形式を指定します。場合によっては、これが唯一使用される日付形式になります。その他の場合(たとえば、「unix」)は、これは 1 年以上前の日付に使用されます。(recentDateFormatConfig を参照)。 として指定されている場合は、デフォルト値が使用されます。 Ant 1.7 以降 |
いいえ。systemTypeKey で示されるシステムタイプのデフォルトの日付形式にデフォルト設定されます。 |
recentDateFormatConfig | Java SimpleDateFormat 表記(例:「MMM dd hh:mm」)で、1 年未満の日付を解析するために FTP サーバーで使用される日付形式を指定します。指定されていない場合(または として指定されている場合)、および systemTypeKey で示されるシステムタイプが最近の日付形式を使用している場合は、その標準形式が使用されます。 Ant 1.7 以降 |
いいえ |
serverLanguageCodeConfig | 月の名前をフォーマットするためにサーバーで使用される言語を指定するために使用される、2 文字の ISO-639 言語コード。これは、サーバーが日付リストで英語以外の言語で月の非数値の略語を使用する場合にのみ指定する必要があります。一般的に配布されている FTP サーバーは、英語またはすべて数字の形式を使用することが増えているため、これはますますまれになっているようです。サポートされている言語は次のとおりです。
Ant 1.7 以降 |
いいえ |
shortMonthNamesConfig | サーバーで使用される月の省略形を、各月をパイプで区切った文字列として、ファイルのタイムスタンプの日付に指定します。たとえば、架空のアイスランドの FTP サーバーで使用される月の名前のセットは、jan|feb|mar|apr|maí|jún|júl|ágú|sep|okt|nóv|desのように指定できます。この属性は、主に serverLanguageCode 属性でサポートされていない言語をサポートするために存在します。 Ant 1.7 以降 |
いいえ |
useFtps | ftp の代わりに ftps を使用するかどうか。ブール値で、デフォルトは false です。 Ant 1.10.13 以降 |
いいえ |
アクション | remotedir の意味 | ネストされた fileset の使用 |
---|---|---|
send/ put |
ファイルの送信先のベースディレクトリ | 通常どおりに使用され、ローカルマシンで評価されます |
recv/ get |
ファイルの取得元のベースディレクトリ | fileset の include/exclude パターンに一致する、remotedir 下にあるリモートファイル |
del/ delete |
ファイルの削除元のベースディレクトリ | fileset の include/exclude パターンに一致する、remotedir 下にあるリモートファイル |
list |
ファイルが一覧表示されるベースディレクトリ | fileset の include/exclude パターンに一致する、remotedir 下にあるリモートファイル |
mkdir |
作成するディレクトリ | 使用されません |
chmod |
ファイルのモードが変更されるベースディレクトリ | fileset の include/exclude パターンに一致する、remotedir 下にあるリモートファイル |
rmdir |
ディレクトリの削除元のベースディレクトリ | fileset の include/exclude パターンに一致する、remotedir 下にあるリモートディレクトリ |
ftp
タスクは、取得、削除、一覧表示、またはモードを変更するファイルを指定するために、任意の数のネストされた <fileset>
要素をサポートします。
fileset
の followsymlinks 属性は、ローカル (put
) およびリモート (get
、chmod
、delete
、list
) の fileset でサポートされています。*Ant 1.6 より前では、リモート fileset でシンボリックリンクはサポートされていませんでした。シンボリックリンクを除外する(Ant 1.5.x 以前の動作を維持する)には、followsymlinks を明示的に false
に設定する必要があります。* リモート fileset では、隠しファイルがシンボリックリンクであるかどうかはチェックされません。隠しファイルは現在、シンボリックリンクではないと想定されています。
ファイルの送信方法を説明する最も簡単な方法は、いくつかの例を示すことです。
ftp.apache.org に anonymous としてログインし、htdocs/manual ディレクトリ内のすべてのファイルを、そのユーザーのデフォルトディレクトリにアップロードします。
<ftp server="ftp.apache.org" userid="anonymous" password="me@myorg.com"> <fileset dir="htdocs/manual"/> </ftp>
ftp.apache.org に anonymous としてログインし、htdocs/manual ディレクトリ内の新規または変更されたすべてのファイルを、anonymous のデフォルトディレクトリを基準とした incoming ディレクトリにアップロードします。
<ftp server="ftp.apache.org" remotedir="incoming" userid="anonymous" password="me@myorg.com" depends="yes"> <fileset dir="htdocs/manual"/> </ftp>
ポート 2121 の ftp.apache.org に、パスワード java1 を使用して coder としてログインし、htdocs/manual ディレクトリ内の新規または変更されたすべての HTML ファイルを /pub/incoming ディレクトリにアップロードします。ファイルはテキストモードで転送されます。ファイアウォールの背後からファイルを送信するために、パッシブモードがオンになっています。
<ftp server="ftp.apache.org" port="2121" remotedir="/pub/incoming" userid="coder" password="java1" passive="yes" depends="yes" binary="no"> <fileset dir="htdocs/manual"> <include name="**/*.html"/> </fileset> </ftp>
ポート 2121 の Windows サーバー ftp.hypothetical.india.org に、パスワード java1 を使用して coder としてログインし、htdocs/manual ディレクトリ内の新規または変更された(タイムゾーンの違いを考慮した)すべての HTML ファイルを /pub/incoming ディレクトリにアップロードします。ファイルはテキストモードで転送されます。
<ftp server="ftp.hypothetical.india.org" port="2121" remotedir="/pub/incoming" userid="coder" password="java1" depends="yes" binary="no" systemTypeKey="Windows" serverTimeZoneConfig="India/Calcutta"> <fileset dir="htdocs/manual"> <include name="**/*.html"/> </fileset> </ftp>
Windows ベースの ftp.nt.org に、パスワード java1 を使用して coder としてログインし、htdocs/manual ディレクトリ内のすべての HTML ファイルを c:\uploads ディレクトリにアップロードします。各ファイルのアップロード時に進行状況メッセージが表示されます。
<ftp server="ftp.nt.org" remotedir="c:\uploads" userid="coder" password="java1" separator="\" verbose="yes"> <fileset dir="htdocs/manual"> <include name="**/*.html"/> </fileset> </ftp>
FTP サーバーからファイルを取得する方法は、ファイルを送信する方法とほぼ同じです。唯一の違いは、ネストされた fileset が remotedir 属性を FTP サーバー上のファイルのベースディレクトリとして使用し、dir 属性をファイルを配置するローカルディレクトリとして使用することです。 FTP サイトからのファイル構造は、ローカルマシンに保持されます。
ftp.apache.org に anonymous としてログインし、そのユーザーのデフォルトディレクトリからすべての .html ファイルをローカルマシンの htdocs/manual ディレクトリに再帰的にダウンロードします。
<ftp action="get" server="ftp.apache.org" userid="anonymous" password="me@myorg.com"> <fileset dir="htdocs/manual"> <include name="**/*.html"/> </fileset> </ftp>
apache.org が、タイムスタンプに新しいすべて数字の形式を使用する Unix FTP サーバーに切り替えた場合、このバージョンが必要になります。前の例と同じ機能を実現しますが、数値のタイムスタンプを正常に処理します。systemTypeKey はここでは必須ではありませんが、何が起こっているのかを明確にするのに役立ちます。
<ftp action="get" server="ftp.apache.org" userid="anonymous" password="me@myorg.com" systemTypeKey="UNIX" defaultDateFormatConfig="yyyy-MM-dd HH:mm"> <fileset dir="htdocs/manual"> <include name="**/*.html"/> </fileset> </ftp>
日付を標準的なヨーロッパ形式のフランス語名で表示する UNIX FTP サーバー ftp.hypothetical.fr に anonymous としてログインし、そのユーザーのデフォルトディレクトリからすべての .html ファイルをローカルマシンの htdocs/manual ディレクトリに再帰的にダウンロードします。
<ftp action="get" server="ftp.hypthetical.fr" userid="anonymous" password="me@myorg.com" defaultDateFormatConfig="d MMM yyyy" recentDateFormatConfig="d MMM HH:mm" serverLanguageCodeConfig="fr"> <fileset dir="htdocs/manual"> <include name="**/*.html"/> </fileset> </ftp>
おそらくもうお分かりのように、ネストされた fileset 要素を使用して、リモート FTP サーバーから削除するファイルを選択します。繰り返しますが、fileset はローカルディレクトリではなく、リモートディレクトリを基準としています。実際、fileset の dir 属性は完全に無視されます。
ftp.apache.org に anonymous としてログインし、そのユーザーのデフォルトディレクトリからすべての *.tmp ファイルを削除してみます。ファイルの削除権限がない場合は、BuildException
がスローされます。
<ftp action="del" server="ftp.apache.org" userid="anonymous" password="me@myorg.com"> <fileset> <include name="**/*.tmp"/> </fileset> </ftp>
anonymous ユーザーのデフォルトディレクトリを基準とした FTP サーバー上のすべてのファイルのファイルリストを data/ftp.listing に取得します。リストは、FTP サーバーが通常ファイルをリストする形式です。
<ftp action="list" server="ftp.apache.org" userid="anonymous" password="me@myorg.com" listing="data/ftp.listing"> <fileset> <include name="**"/> </fileset> </ftp>
mkdir
アクションでは、作成するディレクトリは remotedir 属性を使用して指定することに注意してください。
デフォルトのルートディレクトリの下に some/remote/dir ディレクトリを作成します。他のすべてのアクションと同様に、ディレクトリ区切り文字は FTP サーバーの要件に従って正しい必要があります。
<ftp action="mkdir" server="ftp.apache.org" userid="anonymous" password="me@myorg.com" remotedir="some/remote/dir"/>
このアクションは、ネストされた fileset 要素を使用して、リモート FTP サーバーから削除するディレクトリを選択します。 fileset はローカルディレクトリではなく、リモートディレクトリを基準としています。 fileset の dir 属性は完全に無視されます。削除するディレクトリは空であるか、fileset パターンによって削除対象として選択された他のディレクトリのみを含んでいる必要があります。そうでない場合、BuildException
がスローされます。また、ディレクトリの削除権限がない場合も、BuildException
がスローされます。
ftp.apache.org に anonymous としてログインし、/somedir/dira ディレクトリと、/somedir/dirb から始まるすべてのディレクトリツリーを削除してみます。/somedir/dirb ツリーを削除する場合、タスクはリーフからルートに向かって開始されるため、ディレクトリを削除しようとするときに、その下のすべてのディレクトリが既に削除されていることが確実になります。明らかに、ツリー内のすべてのファイルは既に削除されている必要があります。
<ftp action="rmdir" server="ftp.apache.org" userid="anonymous" password="me@myorg.com" remotedir="/somedir" > <fileset> <include name="dira"/> <include name="dirb/**"/> </fileset> </ftp>
例として、/somedir に含まれるすべてを削除する場合、最初に action=delete
で <ftp>
タスクを呼び出し、次に action=rmdir
で remotedir=/somedir
を指定し、
<fileset> <include name="**"/> </fileset>
remotedir パラメータで指定されたディレクトリは削除対象として選択されることはないため、削除する必要がある場合は、remotedir パラメータでその親ディレクトリを指定し、somedir/** のように <fileset>
パターンに含めます。