CLIマジック:lftpで行う手軽なバックアップ

 どのようなLinuxディストリビューションであれ、そのリポジトリにはグラフィカル系のFTPクライアントがいくつか収録されているはずだが、高機能なコマンドライン系FTPツールを探しているなら lftp がお勧めである。そうした用途なら伝統的なftpコマンドを使えば事は足りそうなものだが、lftpを使用することにより、FTPプロトコルを用いたファイル/ディレクトリ管理がより高度なレベルで実行可能となるのだ。これが実際に何を意味するのかを確認するため本稿では、Webサイトに置かれたファイル群をローカルフォルダにバックアップコピーするスクリプトを、lftpを使って構築してみることにする。

 こうしたスクリプトを記述する場合、まずはlftpにおけるFTPサーバへの接続法およびリモートとローカルにあるディレクトリ間の同期法を知っておかなければならない。使用するFTPサーバが匿名での接続をサポートしている場合は、「lftp ftpsite 」という指定をすればいい。ユーザ名とパスワードの指定が必要なサーバの場合、通常は「lftp -u username,password ftpsite 」といった形式の構文でいいはずだ。

 lftpを使ったリモートサイトのディレクトリとローカルのハードディスクにあるフォルダとの同期については、そのためのmirrorというコマンドが用意されている。このコマンド実行時に何もスイッチを指定しなかった場合は、ローカルおよびリモートの双方におけるカレントディレクトリが操作対象となる。そうではなくソースおよびターゲットとするディレクトリを明示的に指定したければ、下記の構文を使用すればいい。

mirror path/to/source_directory path/to/target_directory

 このmirrorコマンドにはその他にも、同期プロセスを制御するための様々なスイッチが用意されている。例えばmirrorコマンドにおける--deleteスイッチは、リモートディレクトリ側に存在しないファイルはローカルフォルダでも削除させるオプション、--only-newerスイッチはlftpによるダウンロード対象を新規ファイルだけに制限させるオプションである。また--excludeスイッチを使用すると、同期時に特定のファイルやディレクトリをスキップさせることができる。その他、同期プロセスを逐一監視したければ--verboseスイッチを指定すればいい。

 ディレクトリ間の同期をするごとに、これらのスイッチ指定をいちいち入力するのは結構な手間である。幸いなことにlftpでは、複数のコマンドを一括して実行できるようになっている。その際に使用するのが-eスイッチであり、これを下記のような構文で記述すると、lftpは接続を維持したまま指定されたコマンド群を逐次実行していく。

lftp -u username,password -e "mirror --delete --only-newer --verbose path/to/source_directory path/to/target_directory" ftpsite

 このコマンド指定では、まず最初に指定された認証情報を基にしてFTPサーバへの接続が行われた後、引用符で囲まれた部分のコマンド(複数指定可)が順次lftpにより実行されることになる。こうしたコマンド群の複合指定はテキストファイルに記述したものを読み込ませるという形でも実行でき、その際にはlftp実行時に-fスイッチで当該ファイルを指定すればいい。

lftp -f /home/user/ftpscript.txt

 lftpはその他の便利な使い方もできるようになっている。その1つがatスイッチであり、これを使用すると特定時刻にバックアップを実施させることが可能で、例えば下記のサンプルは深夜零時に実行させるという指定である。

lftp at 00:00 -u username,password -e "mirror --delete --only-newer --verbose path/to/source_directory path/to/target_directory" ftpsite &

 この末尾にあるアンド記号はコマンドをバックグラウンドで実行させるための指定で、こうしておくとターミナルウィンドウを開いたままにしなくても済むようになる。

 以上は、リモートのFTPサーバに置かれたファイルやディレクトリのバックアップ作成法である。こうしたバックアップをいくら行っても必要時における復元法も知っておかないと無用の長物と化すだけだが、lftpにおけるその操作法はいたって簡単で、具体的には先のmirrorコマンドに--reverseスイッチを追加すればいい。

lftp -u username,password -e "mirror --reverse --delete --only-newer --verbose path/to/source_directory path/to/target_directory" ftpsite

 その名称から推測できるように、このスイッチはソースおよびターゲットの指定ディレクトリを逆転させた上で処理を行わせるための指定であり、この場合の実質的な作業は、lftpによってローカルのディレクトリにあるファイル群をリモートのFTPサーバにアップロードさせているだけである。

 以上で本稿の解説は終了である。lftpにはその他の有用なオプションも装備されているが、詳しくはmanページを参照して頂きたい。これらを上手く使いこなせればプロフェッショナルレベルでのFTP操作ができるようになるだろう。

Dmitri Popovは、フリーランスのライターとして、ロシア、イギリス、アメリカ、ドイツ、デンマークのコンピュータ雑誌に寄稿している。

Linux.com 原文