linux:lftpコマンドでサーバーからディレクトリごと一気に取得

シェアする

ウェブメンテナンスをしていると、サーバーのデータをダウンロードしたり、逆にローカル(自分のパソコン)で作成したデータをサーバーにアップロードすることが頻繁にあります。

windows を使っていれば、GUIで視覚的に操作できるftpクライアントのツールが便利ですね。

でも、Linuxサーバーのデータをパーミッション情報を保持して取得したいときは、windowsにダウンロードするわけにはいきません。

たとえば、Windowsのなかにvagrantなどで linux の検証環境ができていて、そこで開発や検証を行うときなど。

そんなときはその検証環境のlinuxからサーバーデータをダウンロードしてしまいましょう。

もし、サーバーへSSHでログインできるのであれば、サーバー上で tarコマンドで一つのファイルにまとめてからダウンロードすれば良いですが、相手がレンタルサーバーのときは、ftpコマンドを使いましょう。

昔ながらの ftpコマンドは、ディレクトリ構造ごとのコピーは出来ませんが、lftp というコマンドはミラーリングすることが出来ます。

(lftpのヘルプ)

ここではlftpコマンドのなかの mirror コマンドを使ってサーバーデータをパーミッション情報やディレクトリ構造を保ったままダウンロードしたり、アップロードする方法を紹介します。

(mirrorコマンドのヘルプ)

lftpコマンドでディレクトリごとコピーする方法

lftp でサーバに接続します。

-u: ユーザ指定

リモートのディレクトリを見るのは、ls コマンドです。

lsのオプションは、
R: サブディレクトリも表示
です。

ローカル側のディレクトリを調べるコマンドは、!ls です。
! は、シェルコマンド実行という意味で、他にも、!cdや !mv など何でも使えます。

さて、それでは mirrorコマンドを使ってディレクトリ構造ごとファイルを取得します。

mirror source target のように使います。

source は取得したいリモートのディレクトリ、target はローカルのディレクトリですが、targetを指定しなければリモートのsourceと同じ名でディレクトリが作られます。
-v: 冗長表示(verbose)

できたかどうかローカルのディレクトリを確認してみましょう。

!でシェルコマンド実行。 ls のオプションは、
a: すべてのファイル
l: リスト表示
F: */=>@| でファイル属性を示す
 ( / はディレクトリを示します)
R: サブディレクトリも表示

パーミッションも含めてちゃんと取得できていることが確認できました。

mirror コマンドですが、 -R オプションをつけると、ローカル → リモートへのミラーリングになります。

ローカルで編集した後、サーバーに反映するときに使いましょう。 その場合も、
mirror source [target]
の順序は変わらないですが、
source → ローカルディレクトリ
target → リモートディレクトリ(省略可) となります。

最後に、quit コマンドで、lftp を終了しましょう。

お疲れ様でした!

この記事が気に入ったら
いいね ! しよう