FTP

説明

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 SYST コマンドに基づいてサーバーの OS タイプをシステムが自動検出し、その OS タイプの標準形式を想定するというデフォルトのメカニズムが使用されます。

ビルドスクリプトがプロパティファイルで構成されているプロパティファイルベースの開発を支援するために、これらの属性のいずれについても、値 は指定しないことと同等です。

これらのオプションは自動検出スキームと互換性がないことを理解してください。これらのオプションのいずれかが指定されている場合( 以外の値で)、システムタイプを選択する必要があります。また、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 サーバーは、英語またはすべて数字の形式を使用することが増えているため、これはますますまれになっているようです。サポートされている言語は次のとおりです。
  • en—英語
  • fr—フランス語
  • de—ドイツ語
  • it—イタリア語
  • es—スペイン語
  • pt—ポルトガル語
  • da—デンマーク語
  • sv—スウェーデン語
  • no—ノルウェー語
  • nl—オランダ語
  • ro—ルーマニア語
  • sq—アルバニア語
  • sh—セルビア・クロアチア語
  • sk—スロバキア語
  • sl—スロベニア語
上記以外の言語が必要な場合は、shortMonthNamesConfig 属性も参照してください。
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 属性に関する注意

アクション 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 下にあるリモートディレクトリ

ネストされた要素として指定されたパラメータ

fileset

ftp タスクは、取得、削除、一覧表示、またはモードを変更するファイルを指定するために、任意の数のネストされた <fileset> 要素をサポートします。

filesetfollowsymlinks 属性は、ローカル (put) およびリモート (getchmoddeletelist) の fileset でサポートされています。*Ant 1.6 より前では、リモート fileset でシンボリックリンクはサポートされていませんでした。シンボリックリンクを除外する(Ant 1.5.x 以前の動作を維持する)には、followsymlinks を明示的に false に設定する必要があります。* リモート fileset では、隠しファイルがシンボリックリンクであるかどうかはチェックされません。隠しファイルは現在、シンボリックリンクではないと想定されています。

ファイルの送信

ファイルの送信方法を説明する最も簡単な方法は、いくつかの例を示すことです。

ftp.apache.organonymous としてログインし、htdocs/manual ディレクトリ内のすべてのファイルを、そのユーザーのデフォルトディレクトリにアップロードします。

<ftp server="ftp.apache.org"
     userid="anonymous"
     password="me@myorg.com">
    <fileset dir="htdocs/manual"/>
</ftp>

ftp.apache.organonymous としてログインし、htdocs/manual ディレクトリ内の新規または変更されたすべてのファイルを、anonymous のデフォルトディレクトリを基準とした incoming ディレクトリにアップロードします。

<ftp server="ftp.apache.org"
     remotedir="incoming"
     userid="anonymous"
     password="me@myorg.com"
     depends="yes">
    <fileset dir="htdocs/manual"/>
</ftp>

ポート 2121ftp.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.organonymous としてログインし、そのユーザーのデフォルトディレクトリからすべての .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.franonymous としてログインし、そのユーザーのデフォルトディレクトリからすべての .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.organonymous としてログインし、そのユーザーのデフォルトディレクトリからすべての *.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.organonymous としてログインし、/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=rmdirremotedir=/somedir を指定し、

<fileset>
    <include name="**"/>
</fileset>

remotedir パラメータで指定されたディレクトリは削除対象として選択されることはないため、削除する必要がある場合は、remotedir パラメータでその親ディレクトリを指定し、somedir/** のように <fileset> パターンに含めます。