• ベストアンサー
  • 困ってます

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

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

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数14244
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.3
  • notnot
  • ベストアンサー率47% (4606/9664)

ftpはあくまでファイル転送プロトコルなのでmoveなどは無いです。 こんな感じでバッチファイルで。テストはしていません。 set HOST=ホスト名 set USER=ユーザ名 set PASS=パスワード echo %USER%>tmp1 echo %PASS%>>tmp1 echo ls abc*.log tmp2>>tmp1 echo quit>>tmp1 ftp -s:tmp1 %HOST% echo %USER%>tmp1 echo %PASS%>>tmp1 for /f %%F in (tmp2) do (echo get %%F&echo delete %%F)>>tmp1 echo quit>>tmp1 ftp -s:tmp1 %HOST% 別の方法として、Windowsホストのftpサーバーって使ったこと無いのでわかりませんが、もしかすると ren abc*.log abc*.tmp もしくは quote site ren abc*.log abc*.tmp が効けば、後は prompt mget abc*.tmp mdelete abc*.tmp 受信後に、ren abc*.tmp abc*.log で名前を戻す。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

あえて名称を変える処理も思いつきませんでした。 そういう方法もあるのですね! 目からうろこです。早速試してみます 最近は便利な機能が最初からセットされているものが増えているため、 こういった、「こうしてはどうか?」といった 考え方がなかなか出来なくなっている気がします。 丁寧なご回答ありがとうございました(^^)。

関連するQ&A

  • コマンドプロンプト FTPコマンドについて

    こんばんわ。 今回はコマンドプロンプトのFTPコマンドについて質問させてください。 処理概要 Windowsバッチにて、サーバA(Windows)からサーバB(UNIX)にFTPでファイルを複数送りたい その際、FTPが成功したか失敗したかをログファイルに出力したい。 以下プログラム set logDir=C:\hogehoge\log\ set settingFileName=C:\hogehoge\upload.ftp set execDate=%date:~-10,4%%date:~-5,2%%date:~-2,2% set logFileName=%logDir%log_%execDate%.txt echo FTPバッチ起動 >> "%logFileName%" cd C:\hogehoge echo FTP開始 >> "%logFileName%" ftp -s:"%settingFileName% >> "%logFileName%" upload.ftpというファイルには以下のように記述しております。 ftp open サーバIP ポート ログインID パスワード binary prompt mput *.csv bye この2種類のファイルで、FTPは出来るのですが、 どうにかして成功/失敗を判断したいです。 どなたかわかる方、ご教授お願いいたします。 補足 UNIX上のバッチ処理(Cシェル)でもファイルがあるかどうか判断していますが、 WindowsでFTP失敗の場合、メールを送りたくてこのようなバッチを作成しました。

  • ftpコマンドで丸ごとダウンロード

    ftpコマンドでWebのドキュメントルートごとgetはできませんか? getで1ファイル落とせます。 mgetでカレントのファイルを全て落とせます。 それだけでなく、 ディレクトリを丸ごとダウンロードしたいのですが、それはftpのコマンドでは無理なのでしょうか? いろいろ検索してみました。 下記のような情報はあります。 http://sasuke.main.jp/ftpcommand.html でも、ディレクトリ毎落とせるのかどうかイマイチわかりません。

  • FTPコマンド mgetでとまってしまう

    コマンドプロンプト画面から open www.foo.or.jp funfun abcdefg cd test cd csv lcd C:\test prompt mget *.csv このように打ち込んでいるんですが mget *.csv でとまってしまいます mget * でも駄目です そこまではうまくいくのですが・・・ パソコンによって、mgetコマンドが不可能とかありますか? それともFTPのバージョンなどあるんでしょうか?? よろしくお願いします。

その他の回答 (2)

  • 回答No.2
  • ken__t
  • ベストアンサー率41% (53/129)

はじめまして。 以下の様な流れではだめでしょうか。 1.ftp接続し、対象ファイルの一覧を取得する。 ※一時ファイルに保存する。 2.ファイル一覧のファイルをget,deleteする。 ※一時ファイルの一覧について処理を行う。 3.1.2.を繰り返す。 これであれば、サーバへの接続方法はftpだけで対応ができます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

確かに!一覧を先に取得しておけば それだけを取得・削除が出来そうですね。 ご回答ありがとうございました(^^)

  • 回答No.1
noname#39970

telnetして moveをつかう  じゃだめなのかな?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ftpサーバは別会社のもので、 ユーザ名とパスワードを振り分けられているのです。 ftpログインなどの管理・チェックも行っているため、 telnet利用はだめかと思います。 他に方法がなければ提案してみますね。 ご回答ありがとうございました(^^)

関連するQ&A

  • バッチファイルにて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でのファイル取得終了後に続いて バッチスクリプトを流したいのですが、その方法。 お分かりになる方いらっしゃいましたらよろしくお願いいたします。

  • ftpのコマンド詳細をお教えください。

    「UNIXファイルサーバ内のデータ群」を「Win2000ProのDISK内」に、PC側の操作(FTP)で持ってこようと思います。FTPは出来るのですが、UNIXファイルのあるディレクトリ以下をすべて(子、孫ディレクトリを含めて(穴を掘って))持ってきたいのですが、ftpでサーバに入ってから prompt bin mget * とすると、直下のファイルと、その子は取ってこれます。でも孫以下のディレクトリ以下が持ってこれません。どのようにすれば可能でしょうか? また、持ってこれた子ファイルは、PC内の同一フォルダに一斉に落ちるため(フォルダを生成してくれない)ファイル名が重複している場合こまります。 PC側にも、元と同じようなディレクトリ構成で持ってくるにはどのようにすればいいでしょうか?

  • ftpコマンド出力結果の取得

    ftpコマンドのバッチ処理によってファイルの一覧の結果を取得したいのですが、 リダイレクション等を用いても取得できません。 どのようにすればいいか教えてください。 **************状況************* OSおよびOSレベル:AIX5.2 シェル:Kシェル コマンドファイルの中身(ftp.txt) cat << EOF | ftp -n open SERVER user USER PW cd PATH ls -l bye EOF SERVER:実際のサーバー名 USER:実際のユーザー名 PW:実際のパスワード PATH:実際のパス これを以下のように実行し、結果を取得しようとしました。 # ./cmd.ftp > log しかし、出力ファイルlogの中身はカラっぽでした。 ところが、リダイレクションを外し、コマンドファイルのみを実行すると、結果が画面に表示されます。 何故、画面には表示されるのに、リダイレクションやパイプでは結果が渡されないのかが分かりません。

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

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

  • ftpのmgetコマンドの自分の格納場所の指定方法は?

    先日、ftpコマンドについてこのサイトで色々教えていただき感謝しております。 複数のファイルを受信するのにmgetコマンドを教えていただいたのですが、 相手より受信した場所の格納場所の指定が上手くいきません。 先方にFTPとしてログインでき、"PROMPT"→"MGET *"と行うのですが、受信したファイルの格納場所がCドライブの直下になってしまいます。 自分のインターネットサービスマネージャーの ルートは別のフォルダに設定してあるのですが、これは受信したデータの初期値にはならないのでしょうか? また、調べたところ省略すると、ワーキングディレクトリに作成されるみたいにかかれていましたが、ワーキングディレクトリはどこかで指定できるのでしょうか? たとえばC:\AAAに受信したファイルを格納したい場合はどうやって書けばよいでしょうか? MGET * C:\AAA見たいに色々試して見ましたが、駄目でした。

  • FTPにより自動でファイルをサーバ間移動させたい

    シェルスクリプトの作成について初心者の者です サーバA(レンタルサーバ)のバックアップファイル(毎日生成)を ・サーバB(自作(Fedora-core4))から自動でFTP接続させて、 ・サーバAのバックアップファイルをサーバBにコピーして、 ・サーバAのバックアップファイルを消去しようとしています。 皆さんに色々教えていただいて下記(sample)のように記載して 下記の実行結果まできましたが最後の所でつまずいています。 コピー元(サーバA)にあるファイルに頭に「bak***」のつくファイルを すべてコピーしてきて、コピーしたあと、そのファイルを消去しようとしています 例えば、今日(9日)はbak-mysql-*********.sql.gzとbak-root********.tar.bz2 の2種類が(20121207、20121208、20121209)の6ファイルあります つまり、この6ファイルをコピーして、その後、削除させたいと思います それで、サーバAの/rootに下記のsample (ftp_all.sh)のスクリプトを置きました ********** sample (ftp_all.sh) ************************** #!/bin/csh -f #"@(#)ftp_all.sh 1995/07/01 Copyright(C)1995 ASH" # # name: ftp all files /usr/bin/ftp -n サーバAのIPアドレス << EOF user username password passive binary cd /home/city21/backup mget bak*.* mdelete bak*.* bye EOF ********************************************* その実行結果は次のとおりです *************** 実行結果 *********************** [root@linux ~]# sh ftp_all.sh Passive mode off. mget bak-mysql-20121207.sql.gz? mget bak-root-20121207.tar.bz2? mget bak-mysql-20121209.sql.gz? mget bak-root-20121209.tar.bz2? mget bak-mysql-20121208.sql.gz? mget bak-root-20121208.tar.bz2? [root@linux ~]# ****************************************************** この実行結果をみると ・20121207.sql.gz、20121207.tar.bz2、20121209.sql.gz、20121209.tar.bz、20121208.sql.gz、20121208.tar.bz  6ファイルともmgetでファイルをコピーしているかのようにみえます  しかし、実際に、サーバB側にコピーされているのは  上記の実行結果の最初の3ファイル、(20121207.sql.gz、20121207.tar.bz2、20121209.sql.gz)しかコピーされて  いません  また、mdeleteのコマンドが全く効いていません  何故なのか、どこを直せばいいのか教えていただければ幸いです  また、今回はスクリプトの中に  /usr/bin/ftp -n サーバAのIPアドレス << EOF  ・  ・  ・  EOF  としたのですが    ftp -n サーバAのIPアドレス << _EOD  ・  ・  ・  _EOD としている例もあります  このEOF とか _EODの意味も勉強したいのですが  どこかこのあたり解説しているものがあれば教えていただければ  幸いです  よろしくお願いします。

  • FTPにより自動でファイルをサーバ間移動させたい

    サーバA(レンタルサーバ)のバックアップファイル(毎日生成)を サーバB(自作(Fedora-core4))から自動でFTP接続させて、サーバAの バックアップファイルをサーバBにコピーして、サーバAのバックアップファイル を消去しようとしています。 自動で抽出してくるシェルスクリプトをある方に教えてもらって下記(sample)のように 記載して、サーバBのルートに置いています ********** sample (ftp_all.sh) ************************** #!/bin/csh -f #"@(#)ftp_all.sh 1995/07/01 Copyright(C)1995 ASH" # ftp -n サーバAのIPアドレス << _EOD user username password passive binary cd /home/****/backup mget bak*.* mdelete bak*.* bye _EOD **************************************************** 実行結果は次のようになります *************** 結果 *********************** [root@linux ~]# sh ftp_all.sh AUTH not understood AUTH not understood KERBEROS_V4 rejected as an authentication type Passive mode off. mget bak-mysql-20121207.sql.gz? mget bak-root-20121207.tar.bz2? mget bak-mysql-20121206.sql.gz? mget bak-root-20121206.tar.bz2? mget bak-mysql-20121205.sql.gz? mget bak-root-20121205.tar.bz2? mget bak-mysql-20111226.sql.gz? mget bak-mysql-20111111.sql.gz? [root@linux ~]# sh ftp_all.sh AUTH not understood AUTH not understood KERBEROS_V4 rejected as an authentication type Passive mode off. mget bak-mysql-20121207.sql.gz? mget bak-root-20121207.tar.bz2? mget bak-mysql-20121206.sql.gz? mget bak-root-20121206.tar.bz2? mget bak-mysql-20121205.sql.gz? mget bak-root-20121205.tar.bz2? [root@linux ~]# ********************************************************************** ファイル名の頭に「bak」とつくファイルを全てコピーしコピーの後、消去しようとしています サーバAには「bak」とつくファイルは、bak-mysql****が5、6、7と3個、bak-root****が5、6、7と3個の全部で6個あるのですが 実際に [root@linux ~]# sh ftp_all.sh と打鍵すると、サーバBにコピーされるのは、bak-mysql****の20121207、bak-root****の20121207の2個のみで他のものは コピーされません また、実行結果をみてもらってもわかるように「mdelete bak*.*」のコマンドが実行されていません ・何故、最新のファイル(20121207)の2個のみになっているのか? ・削除されてないのはなぜか ・bak頭につくファイルのコピーそして削除ができるようにするにはどのようにしたらいいか  教えていただけないでしょうか  よろしくお願いします。

  • FTPコマンドの戻り値(エラーコード)の意味

    【FTPコマンドの戻り値=”2”は何のエラーを意味するのでしょうか?】 あるアプリからbatファイルを起動する仕組みを作っています。 そのbatファイル内でFTPコマンドによるファイル送信をしていますが、 FTPコマンドの戻り値が正常終了の”0”ではなく”2”となってします。 処理結果をログに出すようにしているのですがそこもうまくいっていないようです。 DOSプロンプトを起動してFTPコマンドを手で入力して行くと ステップごとには正しく動くのですが、bat起動だとだめなのです。 検索してみても「エラーコードの意味」がHitしません。 どなたか教えていただけますか? 【処理詳細を以下に記します。】 内容は、ある制御ファイル(CTL。中身は0バイト)群を FTP転送し、日付入りファイル名のログに結果を出力するだけです。 ○batファイル(引数%1には、アプリから日付が渡されます。) ftp -s:ftpcmd.txt > ftplog_%1.txt ○Txtファイル open xxx.xxx.xxx.xxx (userid) (password) cd (処理ディレクトリ) ascii prompt mput c:\FTP\*.xxx.ctl disconnect bye

  • SolarisからWindowsへFTPするときのオプション

    Solaris8上でftpコマンドに関するのシェルを作成しています。 処理概要はSolaris上にあるファイルをWindwosのFTPサーバーに送信したいのです。そのFTP処理時、FTPの一連のコマンドを記入したテキストファイルを指定して実行したいのです。Windows上でバッチ処理をするときは、以下のように処理しています。  ftp -s:xxxx.txt  (ここでxxxx.txtには、ftpコマンドが記入) Solaris上でftpのオプションをmanで確認したいのですが、それらしきものがありませんでした。  よろしくお願いします。

  • FTPコマンドの記述方法

    FTPサーバーからCSVファイルをダウンロードしようとftpcmd.txtファイルに下記を記述しました。コマンドプロンプトではファイルの取得に成功しています。 open server_name password get remote_file local_file close bye 問題は、この取得したファイルを差し替えるローカルPC側のリダイレクトの場所である[ログファイル名]の.batファイルの記述の仕方がわかりません。 ftp -s:ftpcmd.txt > [ログファイル名]←ログファイル名の記述方法 例えば、”C:¥”に置きたい場合はどのように記述すればよろしいのでしょうか? よろしくお願いします。 ちなみに下記のHPを参考にして作成しました。 http://www.psytec.co.jp/tips/0102/