【Linux】【FTP】 ncftpコマンドでフォルダ以下全部を再帰的に一括アップロードする

Linuxに『ncftp』というコマンドをインストールすると、コマンドラインからディレクトリごと一発でFTP転送することができるそうな。ncftp は、普通の ftp コマンドよりも高機能なFTPクライアントらしい。便利そうなので早速やってみた。

NcFTPをインストールする

渋谷生活さんの解説に従って、NcFTPをインストールしてみた。

wgetでダウンロード

本家のダウンロードページからソースコードを入手可能。入手したのは NcFTP 3.2.3 のソースコード。

wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.3-src.tar.gz

解凍する

# tar zxvf ncftp-3.2.3-src.tar.gz
# cd ncftp-3.2.3

インストール

rootになって、インストールする。

# ./configure
# make
# make install

これで、インストールされるコマンドは下記の通り。

  • ncftp
  • ncftpbatch
  • ncftpbookmarks
  • ncftpget
  • ncftpls
  • ncftpput
  • ncftpspooler

今回は、この中の ncftpputコマンドを使って一括アップロードをやってみる。

ディレクトリまるごと一発アップロード

「あるディレクトリ以下をncftpでバッチ送信」するコマンドが、こちらのページで紹介されている。普通のFTPコマンドで同じことをやろうとすると、自分で再起処理を記述しないとできないので大変だが、ncftpputなら1行のコマンドで解決してくれる。

# ncftpput \
   -u {$FTPID}\
   -p {$FTPPW}\
   -P {$port}\
   -t {$timeout}\
   -v\
   -m\
   -R\
   -r ${retryNum}\
   {$FTPHOST}\
   {$REMOTEDIR}\
   {$LOCALDIR}/*

具体的な値を入れてみると、例えば次のようになる。

# ncftpput \
   -u username\
   -p userpasswd\
   -P 21\
   -t 300\
   -v\
   -m\
   -R\
   -r 10\
   www.hogehoge.jp\
   /htdocs \
   /var/www/staging/htdocs/*

このコマンドで使われているオプションを LinuxZaurusWatch/ncftpputマニュアル翻訳 と照らし合わせてみると、次の通り。

-u XX
ユーザー名。
-p XX
パスワード。
-P XX
FTPのポート番号。(デフォルトは21)
-t XX
タイムアウトするまでの秒数。
-v
ターミナルでのプログレスメータを用いる。(要するに、ターミナル上に進捗を表示するということ)
-m
Attempt to make the remote destination directory before copying.(「ファイルをコピーする前に、リモートに転送先のディレクトリを作成しようと試みる」かな?)
-R
ディレクトリツリーに沿って再帰的にアップロードする。
-r XX
リモートFTPサーバへ接続できるまでXX回の再接続を試みる。

このほか、コマンド上にパスワードが流れるのが気持ち悪い場合は、-f {$認証ファイルのパス}オプションを使うと、認証情報をファイルに保存して指定できる。

シェルスクリプトなどに組み込んで、何かしらの一連の処理の最後に一括して転送するなど、何かと便利に使えそうだ。

関連リンク:


プロフィール

コヤナギ トモヤ

ウェブ系エンジニアしてます。ウェブデザイナー、ウェブディレクターとしてウェブ制作の仕事に携わり、今はエンジニア職に流れ着きました。誰かのお仕事をちょっとだけ効率化するような支援ツールの開発が好き。オープンソースとMITライセンス大好き。人生後半は自由と民主主義のコントリビューターとして過ごす予定。

ウェブ制作支援ツール Pickles 2 をオープンソースで開発しています。

PHP/JavaScript/NodeJS/nwjs/Laravel/Pickles2/オープンソース/心理学/倫理/自由と民主主義

RSSフィード

ページの先頭へ戻る