QA@IT

何かしらのプログラムでFTPサーバ先のフォルダをコピーしたい

6861 PV

やりたいことはタイトルの通りです。
JAVAのFTPClientでFTPサーバにあるファイルGET,PUTは可能なのですが、
ファイル数が多いFTPサーバにあるフォルダを名前を変え同ディレクトリにコピーがしたいのです。
毎回ローカルにゲットしてPUTだと処理に時間がかかる為短縮が目的です。

・JAVAから何かしらのメソッドをしようしFTPコマンドでフォルダのコピー
・FTPサーバー先にフォルダコピーを行うwindowsバッチを準備し、JAVAからサーバー先にそのバッチをたたく(こんなこと可能なのか?)

その他可能な別案があれば知りたいです。

宜しくお願いします。

[追記]
すいません、環境に関する情報が少なかったので追記します。
クライアント:Linux tomcat javaのWeb 画面でボタンを押したタイミングになります
サーバ: windowsのftpサーバ
サーバ上にAというフォルダがありその中に大量のファイルがありますが画面でボタンを
押したタイミングでAのフォルダをコピーしてBといフォルダを作成したいのです。
下記回答いただいたpsExecを利用する方法は恐らくクライアントがWindowsの場合かと認識します。
※少ない情報で回答ありがとうございます。

  • 参考情報にしかなりませんが、回答に追記しました。 -
  • 「Windows側にコマンドを受け付ける仕組みを用意する。」がシンプルで無難そうですね。参考になりました。ありがとうございました。 -

回答

サーバー上でディレクトリの複製をすれば済むような作業を、今はFTPでディレクトリの内容を丸ごとダウンロードして、別名でアップロードでやっているという事であっていますか?

サーバー・クライアントがなんなのか情報が少なすぎてわかりませんが、
その用途であれば、FTPではなくコマンドの実行ができないかを検討すると思います。

Linux同士であれば sshなどでコマンドを実行したり
Windows同士でも psExecなどのツールを別途用意することで実現できるかもしれません。

バッチということはFTPの接続先はWindowsサーバーということでしょうか。
Windows同士だった場合、batファイルをFTPで配置して、psExecでリモートマシンのbatをたたく事ができるかもしれません。
javaを使う必要があるのであれば、ProcessBuilderからpsExecを実行すればいいのではないでしょうか。


LinuxからWindows サーバーですね。
ないこともないけれど…といったレベルでこれといった決定打を私は知らないですね。
公式のリモートコマンド実行 WinRS( Windows Remote Shell )もhttp/https経由だといいつつも、Win以外からやる方法を知りません(加えて設定変えないといけない)。

私が思いつく範囲ですと Linux側に psExecの代替を用意する、Windows側で sshdを起動する、Windows側にコマンドを受け付ける仕組みを用意する。といったところです。

※ 以下のリンクは外部サイトが含まれます

psExec代替またはWin側でsshd

  1. WinExe をLinux側に導入する

    • リモートでコマンドを実行できる。
    • samba4 alpha版の機能を使っている。
    • Win2008以降だとWindowsサーバーが新しいとUACなどの絡みであまりよろしくない設定が必要。
  2. cygwin でsshdをWindows側で起動する

    • この方法を紹介しているサイトは多いと思う。
    • 設定は大変かもしれない。
  3. freeSSHd をWindows側に導入する

    • 導入はcygwinよりは簡単だと思う。
    • おそらくShift-JISで通信することになる。
  4. PowerShell Server

    • 有償のソフトウェアです。sshdとして起動してLinuxからPowerShellを実行できるようです。
      • 1コネクションなら無償でも使えるというのも見かけましたが調べてません。
  5. telnetサービスをWindows側で起動する

  6. Windows Services For Unix / Subsystem for Unix Application をWindows側に導入する

    • 公式ですが、Win2012では非推奨に。(便利そうなんですが私も使ったことありません)

Windows側にコマンドを受け付ける仕組みを用意する。

Windows側にコマンドを受け付ける仕組みはというのは、要するに自前で用意するというものです。
単純にWindows側にWebサーバーやTCP/UDPでコマンドを受け付けるアプリや
ファイルを監視して変更されたらコマンドを実行するようなアプリを用意するというものです。
自前で用意する手間がかかりますので。そりゃ自分で用意すりゃできるでしょうよという程度のものです。


他にもっといいやり方があるかもしれませんが、私が知っている限りでは以上です。
どの方法も当然外部から同じことをすれば同じようにコマンドが実行できますので、設定の際はセキュリティにもお気を付けください。
あと、コピーするフォルダに日本語名が含まれると苦労するかもしれません。

編集 履歴 (2)
ウォッチ

この質問への回答やコメントをメールでお知らせします。