• ベストアンサー
  • 暇なときにでも

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

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

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

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

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

  • ベストアンサー
  • 回答No.2
  • Lean
  • ベストアンサー率72% (435/603)

FTPコマンドに標準入力からFTPコマンドのサブコマンドを渡してあげればいいです。 以下、実行方法の一例です。 $HOME/.netrc(パーミッション0600に必ずする)に以下のように形式で記述 (他ユーザにパスワード等を見られる事を防げるし、FTPを行うシェルスクリプトを複数作成する場合、いちいちそれぞれに記述しなくて済む。また、パスワードを変更した場合、この1ヶ所を直せば済むという利点があります) machine FTPサーバ名 login ユーザ名 passwd パスワード 記述例) machine ftpserver login ftpuser passwd ftppasswd No.1の方のようなヒアドキュメントを使うなら 実行例) ftp -i << _EOF_FTPCMD_ open ftpserver cd download mget * bye _EOF_FTPCMD_ 質問のようなファイルとしてある場合には FTP.txt -------8<-------8<-------8<-------8<------- open ftpserver cd download mget * bye -------8<-------8<-------8<-------8<------- 実行例) # cat FTP.txt | ftp -i

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

質問者からのお礼

すばらしい。 ありがとうございました。 大変参考になりました。

関連するQ&A

  • solaris7でのcompress

    いつもお世話になっております。 solaris7のcompressコマンドについて質問です。 compressに -f のオプションをつけても、戻り値が2で返ってきてしまいます。(圧縮したファイルが圧縮前のファイルより容量が大きい場合)。 manでcompressコマンドを確認しても、オプションで -f を使用した場合は、戻り値が2で返ってくることはなさそうなんですが・・・・・。 > ls -l file.txt -rw-r--r-- 1 zz001 zz001 0 Mar 24 21:06 file.txt > > compress -cf file.txt > file.txt.Z > > echo $? 2 > > ls -l -rw-r--r-- 1 zz001 zz001 0 Mar 24 21:06 file.txt -rw-r--r-- 1 zz001 zz001 3 Mar 24 22:12 file.txt.Z  ちなみにwhichコマンドで/usr/bin/compressでした。  Solaris8では同様の処理をすると戻り値は0でしたが、どうにもわかりません。solaris7特有の動きなのでしょうか?

  • FTPの動作の違いについて

    FTP接続中のlsの振る舞いに関してお伺いしたいと思います。 サーバの環境は下記になります。 ・クライアントOS(以下"CLI_OS"):Solaris2.6 ・FTP接続先OS(以下"FTP_OS") :Solaris9 CLI_OSのBシェル内でFTP_OSに対しFTP接続を行い、下記のコマンドを実行して CLI_OS側にファイルリストを出力しようとしております。 ftp> ls ?????.txt lsresult.txt 上記につきまして、?????.txtに該当するファイルがFTP_OS側に存在しないと、 CLI_OS側にはlsresult.txtが作成されないという現象が発生しております。 lsに該当するファイルがなかった時に表示される「No such file or directory」 というメッセージがlsresult.txtに出力される事を期待していますが、その メッセージが応答されていないようです。 プログラムからでなく、コマンドラインから同じ事をしても同様の振る舞いでした。 FTPコマンド実行時の違いについて、下記のことがわかっております。 (Solaris8のところに表示されているIPは伏せてあります) ---------Solaris8がFTP_OSの時---------------------------- ftp> ls ?????.txt lsresult.txt 200 PORT command successful. 150 ASCII data connection for /bin/ls (XXX.XXX.XXX.XXX,45207) (0 bytes). 226 ASCII Transfer complete. local: lsresult.txt remote: ?????.txt 49 bytes received in 0.012 seconds (3.90 Kbytes/s) ---------Solaris9がFTP_OSの時---------------------------- ftp> ls ?????.txt lsresult.txt 200 PORT command successful. 550 ?????.txt: No such file or directory. エラーメッセージの出力に関する設定、ftpdの違い、OSの違い等、疑うところは いろいろあるのですが、ftpのlsは機種等の環境に依存してしまうものでしょうか。 上記につきまして、ご回答をお願いします。

  • Solaris系FTPシェルについて

    Solaris6or7系でFTPシェルでファイルリストから連続してダウンロードしたいと思っていますが、 シェル初心者で、ファイルからの読み込み、ループ処理など何を考慮しシェル化すれば困っています。ご教授お願い致します。 #!/bin/sh cd /ファイル保存ディレクトリ ftp -n << EOF !echo start open ダウンロードサーバ user ユーザー パスワード mput ファイルリスト     aaaaa bbbbb ccccc       :       :     数千ファイル  !echo end bye EOF 条件として ・ファイル保存先にはリストのすべてのファイルが存在する ・リスト内のファイルは重複なし ・拡張子はすべて同じもの(実際はUNIX識別番号などです) ・ファイル及び転送先ディスクの容量は考慮しない 以上よろしくお願いします

その他の回答 (1)

  • 回答No.1
  • skoma
  • ベストアンサー率52% (9/17)

Unix系ではこのようにします。 ftp -v -n << EOF prompt open <HOST> user <USER> <PASSWORD> cd hogehoge get hogehoge.sh hogehoge.txt quit EOF

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

質問者からのお礼

ありがとうございました。 参考になりました。

関連するQ&A

  • 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コマンドについて質問させてください。 処理概要 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コマンドのputについて

    AIX、Kシェルです。 ftpでputする際、相対パスは使用出来ないのでしょうか? ex) ftp -nv open HostName user User Password cd tmp/testwork/ put ../file/xxxx.txt quit 上記で実行すると、 putのところで 「200 EPRT command successful. 553 ../file/xxxx.txt: No such file or directory」 というメッセージが出ます。 lcdで作業ディレクトリーを../fileに変更して、put xxxx.txt は出来るのですが、putで相対パスは出来ないのでしょうか? お手数ですが、何卒宜しくお願い致します。

  • FTPの作業をWindows上のバッチでおこないたい

    こんにちは。Windowsは初心者です。 あるファイルを別のサーバーにFTP(PUT)したいと考えています。 コマンドプロンプトからFTPのコマンドをたたくのではなく なにかバッチファイル?のようなもので、中に一連のFTP処理を記述し バッチファイルを起動という形で処理を行ないたいのです。 バッチファイルの作成の方法がわかりません。 またFTPの記述の仕方がわかりません。あるファイルを別のサーバに FTP(PUT)したいだけなのです。またエラーも認知したいとも思っています。 どんな本を読めば分かりますでしょうか? また具体的なコード(バッチに記述するFTPのコード)を知っていましたら 教えて下さい。

  • バッチでFTPコマンド

    バッチ処理内でFTP接続し、ファイルの上げ下げを行う処理を作成しています。 使用しているサーバーはPHPのFTP関数が使用できない環境で、 コマンド関数を利用し直接処理を書こうと思うのですが、 exec('ftp ホスト'); と記述してもユーザー名、パスワードを聞かれてしまう為正常に動作しません。 こういった場合どうしたら良いのでしょうか?? 詳しい方がおられましたらご回答頂ければと存じます。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • ftpコマンドで複数のファイルを移動させたい

    Solaris からftpコマンドを使用してwindosサーバに接続し、複数のファイルを./bak/フォルダにまとめて移動させたいのです。 renameを使えば、1つのファイルでなら可能ですが、複数は無理のようです。 rename test01.txt ./bak/test01.txt→OK rename *.txt ./bak/*.txt    →NG なんとかftpで複数ファイルの移動は出来ないのでしょうか? 1つずつ移動させるしかないのでしょうか?対象ファイルがたくさんあるので、それは避けたいのですが…。 ご教示願えればと思います。

  • 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

  • awkコマンドについて

    教えてください。 Solaris9を使用しています。 SYSTEM Vでawkコマンドを使用しているシェルをSolaris9上で実行すると awk: レコード `従業員番号 従業員氏名 ...' においてフィールド指定が多すぎます。 のMSGが表示されてしまいます。 Solaris9では、1レコードの長さやフィールド数に制限があるのでしょうか? 行っている処理はテキストファイルのタブをカンマに変換です。 SYSTEM V上では正常に動作します。 よろしくお願いします。

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

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

  • WWWメンテナンスユーザにシェルを開放したくない

    SolarisでWWWサーバを構築しています。WWWを管理させるためのユーザ、wwwを作成したのですが、シェルを開放したくありません。ただし、FTPでのコンテンツのPUTのみは許可させたく思っています。何か、いい方法はありますでしょうか?FTPのコマンドでも、cdやlsなど使用することを考えると、/etc/passwdファイルには、何らかのシェルを指定する必要がありそうなのですが、できればシェルは/bin/faiseを指定したく思っています。