Linux (UNIX) でディレクトリを再帰的に FTPアップロードする方法
結論から言うと「NcFTP使いましょう」ということで。
どんなFTPクライアント使っても出来そうな気がしたんですが、
LFTP、Wget、cURLのどれも駄目そうでした(汗
– NcFTP: [http://www.ncftp.com/](http://www.ncftp.com/)
– LFTP: [http://lftp.yar.ru/](http://lftp.yar.ru/)
– Wget: [http://www.gnu.org/software/wget/](http://www.gnu.org/software/wget/)
– cURL: [http://curl.haxx.se/](http://curl.haxx.se/)
## インストール
CentOSの場合、標準のリポジトリにはNcFTPはないので、
[EPEL](http://fedoraproject.org/wiki/EPEL/ja)からインストールします。
## 使い方(インタラクティブ編)
NcFTPを対話的に使う時の使い方は以下の通りです。
ncftp [オプション] リモートホスト名
または
ncftp [オプション] ftp://ホスト名/ディレクトリ名/
-u ユーザ名
-p パスワード
-P ポート番号
anonymous FTPでない時は -u オプションでユーザ名を与えないと
いきなり Login incorrect と言われてしまうので注意。
NcFTPのコマンドプロンプトが出たら、アップロードしたいディレクトリまで cd で移動して、
put -R でアップロードします。
ncftp> cd foo
ncftp> put -R bar
## 使い方(バッチ編)
バッチ的に使う時は ncftpput というコマンドが使えます。
起動方法、代表的はオプションは以下の通り。
FTPのURL (ftp://ftp.examples.com/… というやつ)は使えないみたいなので注意(汗
ncftpput [オプション] リモートホスト名 リモートディレクトリ ローカルファイル…
-R ディレクトリ以下を再帰的にコピー
-u ユーザ名
-p パスワード
-P ポート番号
-m リモートディレクトリが存在しなければ作る
-z resume transfer (転送途中のファイルがある時、続きを転送)
-Z resume transfer しない (デフォルト)
今回は「ディレクトリ以下を再帰的にアップロードする」のが目的なので、-Rは必須。
大量のファイルをアップロードするなら -z も付けておいた方がいいでしょう。
ローカルの bar というディレクトリを、
ftp.examples.com の foo というディレクトリにアップロードする例
(FTPのユーザ名は hoge):
ncftpput -R -u hoge ftp.examples.com foo bar