• ベストアンサー

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

  • FTPファイルのget後のファイル削除について

    IIS7.5とWindows Server 2008 R2でFTPサーバーを構築しています。 FTPサーバーにファイルを保存して、そのファイルをお客様がFTPサーバーに 接続してgetします。 その際に、同じファイルが2回get出来ないように、getされたファイルのみを 削除したいと考えています。 また、getされた場合だけ削除したいので、getされていないファイルの削除は 出来ない為、コマンドによる自動削除は行えません。 getされた場合にのみ該当ファイル削除するようなソフトや方法などがあれば お教え下さい。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • FTPサーバーから受信したファイル一覧からファイル名だけを取得したいです

    こんばんは。いつもお世話になっております。 VB.NET+WinXPなのですが、 FTPサーバーにログインして、 LISTコマンドでファイル一覧を要求すると 「drwxrwxr-x 2 53 53 4096 Feb 28 2006 abc」 などというファイルやフォルダの一覧がかえって来ると思うのですが、 この中からファイル名やフォルダ名だけを取得するには どうしたらよいでしょうか。 TABやコンマが入っていないので、文字列関数で切り取るにも 区切りがわからないと思うのです。 ローカルドライブのDir関数なら、FileAttribute.Nomalや.Directoryの指定でファイル名だけや ディレクトリー名だけを指定して 取得することが出来るのですが、FTPサーバーの場合からの場合はどういった方法があるでしょうか。 参考程度でも構いませんので教えて頂けるとたすかります。m(__)m

  • ftpのgetコマンドで425エラー

    ftpについて質問です。 質問1 getコマンド時に『425 Unable to build data connection: Connection timed out』となる原因がわかりません 質問2 フォルダ名やファイル名が日本語だとコマンドが認識されないのですが、FTPの仕様でしょうか 【環境】 ローカルPCのOS:windows7 サーバのポート解放状況:21番は空いてますが、20番は閉じてます エクスプローラを使用してアドレスバーに『ftp://サーバ名』を入力すると接続でき、マウスのドラッグドロップでダウンロードできますが DOSコマンドプロンプトで接続すると、dirコマンドやgetコマンドがエラーになります。 なお!dirはlcdは成功します。 (↓↓↓以下、コマンドの履歴↓↓↓) C:\>ftp ○○○ ○○○ に接続しました。 ~省略~ 230 User ○○○ logged in ftp> cd ○○○ 250 CWD command successful ftp> binary 200 Type set to I ftp> get ○○○.zip 200 PORT command successful 425 Unable to build data connection: Connection timed out ftp> dir 200 PORT command successful 425 Unable to build data connection: Connection timed out ftp> (↑↑↑コマンドの履歴ここまで↑↑↑) よろしくお願いします。

  • ftp処理でmove(移動)を行いたい

    バッチ処理でデータをftp受信しています。 --------------------------- ユーザ名 パスワード prompt mget abc*.log mdelete abc*.log bye --------------------------- このようなコマンドを行っています。 ftpサーバにはさまざまなファイルが随時生成されます。 この処理では定期的に abcで始まる全てのログファイルをgetし、 abcで始まる全てのログファイルをdeleteしています。 ところが、abcで始まるファイルの生成がランダムのため、 偶然mgetが終わった後でファイルが生成され、 mdeleteを行うと、getしていないファイルまで削除される恐れがあるのです。 そのため、一件ずつ移動を行いたいのですが、 調べてもmoveのようなコマンドがftpで見当たらないのですが なにか、moveに置き換わるような処理はないでしょうか? *windows同士の通信です。

  • FTPコマンドでyymmddファイルをgetしたい

    FTPコマンドでのファイルのGETに関しての質問です。 GETするファイルがGETする日付のファイル名 (例090825.lzh 090826.lzh) となっている。 このファイルは日々追加され、ファイル名は当日のファイル名となる。この追加された日付けのファイル【yymmdd.lzh】をGETしたい。 また FTPの操作はスケジュールを組んでで自動実行するようにする。 この自動実行(batファイル)するftpでのGETするファイル名の指定方法を教えてください。 以下は試行してみました。 get yymmdd.lzh get *.lzh いずれも「ファイルが見つからない」と帰ってきました。 よろしくお願いします。

  • ftpでファイル追加バックアップ

    ftpを利用してファイルのバックアップをしたいです。 リモート側はファイルがどんどん溜まっていきます(日に数10ファイル)。 ローカル側で同じディレクトリ内に1日1回 mget *.* でgetしてきたいのですが、普通にやると、 過去にgetしたファイルも改めて上書きでgetしてきてしまいます。 ローカルにあるファイル名とリモートにあるファイル名を見極めてローカルにあるファイル名の ファイルはgetしてこないコマンドはありませんか?

  • FTPで中途半端なファイルをGETしてしまう。

    相手先にてFTPサーバーを構築しファイルをセットして頂き、こちら側よりFTPでGETしていくような形での情報連携を考えています。 数キロバイトレベルのファイルであれば何ら問題無いのですが、数メガレベルになってくると、セット途中のファイルをGETしてしまい、正しいファイルを取得することができません。 (配置途中のファイルがFTP上に見えてしまう) 相手先はLINUXにて構築、こちら側はWIN2012SERVERになります。 FTPでの方式を変更しない形での解決策ってございますでしょうか?

  • 同一ファイル名を開く+受信

    こんにちは、ご存知の方がいらしゃっいましたら教えてください。  2台のパソコンがあります。   1:パソコン1からパソコン2にCSVファイルA、B、C・・・をFTP     する   2:パソコン2上で、パソコン1から受信したファイルをEXELファイルで     開いた後、マクロで自動計算後保存する。  このとき、1から2へFTPするファイルと、2で展開するファイル名が 同じファイル名なので、たまたま同一タイミングだとロック(?)して開か なくなってしまいます。  1から2へのFTP時に、2でファイルを開くことに待ちをかけることを やりたいのですが、方法がありましたら教えてください。  よろしくお願いします。  (1から2へのFTPの方にはできれば、待ちをかけたくないところです)

  • バッチファイルからftpコマンドを使って不特定のファイルをダウンロードしたい。

    バッチファイル上のftpコマンドを使ってftpサーバーにあるカレントディレクトリー以下のファイルを一切合切ダウンロードしたいのですが、なんかいい方法ありませんか?   ↓ここをなんとかしたいのですが   dir|mget ※[]は各設定を入れる ↓バッチファイル ----------------------------------- ftp open [127.0.0.1] [User] [Password] dir | mget by --------------------------------

  • バッチファイルにてFTPで指定したファイルを取得する

    OSはWindoswXPProです。 以下のようなBATファイルとバッチファイルを作成しました。 ---FTP.bat--- echo off ftp -s:get.ftp ---get.ftp--- open 10.0.X.X username password cd /log get log.yymmdd(実際には日付) c:\access_all_log.txt quit logというディレクトリには日次でログファイルが作成され ファイル名としてlog.yymmddと名づけられています。 やりたいことは2つあります。 1つめはftpするファイル名の日付部分をコマンドなどから 範囲指定して取得するファイルを指定できないか。 (たとえば070301~070315のファイルを一括で取得したい) 2つ目はftpでのファイル取得終了後に続いて バッチスクリプトを流したいのですが、その方法。 お分かりになる方いらっしゃいましたらよろしくお願いいたします。