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

スポンサーリンク
スポンサーリンク:

フォローする