• ベストアンサー

FTPで毎回違うファイル名を受信する

FTPコマンドで、 先方からファイルを受信する(GET)のですが、 先方のファイル名は毎回違う名前がつく場合には、 どうやって受信すればよいでしょうか? 毎日自動で受信を設定する場合です。 先方のファイル名の規約は固定値+日時となっています。 EX.DATA_20040101_1200 DATA_20040101_1300 見たいにファイルが作られています。 こちら側で正常受信したら、DELコマンドで削除を行いたいのです。 手間ですが、先方にログインして、DIRコマンドで先方の中身を見て、内容をテキストに出力して、そのファイル名をGETコマンドにあてて、その後削除するなんて事ができそうな気がしますが、 もっと良い方法はないでしょうか? 総称名("DATA*"見たいな)で指定して受信し、そのファイル名を流用して削除する事ができればありがたいのですが... シンプルで良い手段はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • utf7
  • ベストアンサー率29% (11/37)
回答No.2

mget, mdeleteで行う方法もあると思いますが、この方法を使うと、1つだけまずいことがあります。 例えば、こちらが先方の情報を見た瞬間はファイルが10個あったとします。こちらが先方のファイルをFTPで取得し、ワイルドカードを使用した方法でファイルを消そうとすると、この間に先方がファイルを1つ出力・合計11個となった場合、新しく作成されたファイルはこちらが取得せずに消してしまうという可能性が考えられます。 そのため面倒かもしれませんが、dirコマンドなどでこちらが取得する時点でのファイルリストを取得し、それに基づいてget、deleteするのがいいと思われます。ですがこの場合でも、例えば先方がファイルサイズが大きいファイルを作成している最中にこちらがそれを取得してしまい、内容が不完全な状態でgetしてしまうということもあります。 回避策はMD5によるチェックなどがありますが、ここまでの考慮が必要なければ上記の方法のみでも良いかもしれません。 自分のものではない先方のファイルを消そうとするのですから、シンプルとはいえ、多少は凝った方が安全と思われます。

Ref16570
質問者

お礼

ご意見ありがとうございます。 MGET,MDELETEの件、大変勉強になりました。 ごもっともだと思います。 ファイルの作成中の対応と致しましては、 ヘッダー及びトレーラーを付与して頂けるとの事ですので、トレーラー内のデータ件数のチェックを行い、トレーラーが存在しない場合は受信失敗と見なし、リトライを検討しております。 ご意見、大変参考になりました。 MD5とは何でしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • utf7
  • ベストアンサー率29% (11/37)
回答No.3

#2です。 ファイルがそのような構成になっていれば、問題なさそうですね。 ちなみにMD5ですが、簡単に書きますとファイルの整合性を確認するチェックサムです。 数字または半角英数字で構成される、32文字の文字列です。 これはファイルの内容を元に算出されるもので、例えば0バイトファイルのMD5値は d41d8cd98f00b204e9800998ecf8427e となるのですが、先方が作成するファイル名にMD5の値を付与して頂き、 (例)DATA_YYYYMMDD_HHMM_[MD5] のようなファイルを作成して頂きます。 こちらがFTPでそのファイルを取得後、同じロジックでMD5チェックサムの値チェックを行い、取得した(ファイル名の一部である)MD5と同様であれば、取得元とファイルの中身は変わっていないということが証明できるものです。

Ref16570
質問者

お礼

たびたびご回答ありがとうございます。 MD5について理解できました。 確かにトレーラーに件数とかない場合は 大変有効な機能になると思います。 インターネット上でもう少し探して勉強してみます。 活用できるようであれば、先方にも提案してみたいと思います。 ご意見、大変感謝いたします。ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

mget は使えませんか?

Ref16570
質問者

お礼

ご意見ありがとうございます。 MGETというコマンドは知りませんでした。 調べてみたけど確かにありました。 今後、活用したいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A