ウェブメンテナンスをしていると、サーバーのデータをダウンロードしたり、逆にローカル(自分のパソコン)で作成したデータをサーバーにアップロードすることが頻繁にあります。
windows を使っていれば、GUIで視覚的に操作できるftpクライアントのツールが便利ですね。
でも、Linuxサーバーのデータをパーミッション情報を保持して取得したいときは、windowsにダウンロードするわけにはいきません。
たとえば、Windowsのなかにvagrantなどで linux の検証環境ができていて、そこで開発や検証を行うときなど。
そんなときはその検証環境のlinuxからサーバーデータをダウンロードしてしまいましょう。
もし、サーバーへSSHでログインできるのであれば、サーバー上で tarコマンドで一つのファイルにまとめてからダウンロードすれば良いですが、相手がレンタルサーバーのときは、ftpコマンドを使いましょう。
昔ながらの ftpコマンドは、ディレクトリ構造ごとのコピーは出来ませんが、lftp というコマンドはミラーリングすることが出来ます。
(lftpのヘルプ)
ここではlftpコマンドのなかの mirror コマンドを使ってサーバーデータをパーミッション情報やディレクトリ構造を保ったままダウンロードしたり、アップロードする方法を紹介します。
(mirrorコマンドのヘルプ)
lftpコマンドでディレクトリごとコピーする方法
lftp でサーバに接続します。
-u: ユーザ指定
1 2 |
[vagrant@localhost lftp_test]$ lftp xxx.sakura.ne.jp -u xxxx パスワード: |
リモートのディレクトリを見るのは、ls コマンドです。
lsのオプションは、
R: サブディレクトリも表示
です。
1 2 3 4 5 6 7 8 9 |
lftp xxxx.sakura.ne.jp:~/tmp/lftp_test>ls -R drwx---r-x 3 xxxx users 512 Mar 14 23:48 . drwx---r-x 3 xxxx users 512 Mar 14 23:48 .. drwxr-xr-x 2 xxxx users 512 Mar 14 23:48 test_dir test_dir: drwxr-xr-x 2 xxxx users 512 Mar 14 23:48 . drwx---r-x 3 xxxx users 512 Mar 14 23:48 .. -rw-r--r-- 1 xxxx users 89 Mar 14 03:30 テストファイル.txt |
ローカル側のディレクトリを調べるコマンドは、!ls です。
! は、シェルコマンド実行という意味で、他にも、!cdや !mv など何でも使えます。
1 2 |
lftp xxxx.sakura.ne.jp:~/tmp/lftp_test> !ls -aF ./ ../ |
さて、それでは mirrorコマンドを使ってディレクトリ構造ごとファイルを取得します。
mirror source target のように使います。
source は取得したいリモートのディレクトリ、target はローカルのディレクトリですが、targetを指定しなければリモートのsourceと同じ名でディレクトリが作られます。
-v: 冗長表示(verbose)
1 2 3 4 5 |
lftp xxxx.sakura.ne.jp:~/tmp/lftp_test> mirror -v test_dir/ Transferring file `テストファイル.txt' 合計: 1 個のディレクトリ、1 個のファイル、0 個のシンボリックリンク 新規: 1 個のファイル、0 個のシンボリックリンク 89 bytes transferred |
できたかどうかローカルのディレクトリを確認してみましょう。
!でシェルコマンド実行。 ls のオプションは、
a: すべてのファイル
l: リスト表示
F: */=>@| でファイル属性を示す
( / はディレクトリを示します)
R: サブディレクトリも表示
1 2 3 4 5 6 7 8 9 10 11 12 |
lftp xxxx.sakura.ne.jp:~/tmp/lftp_test> !ls -alFR .: 合計 12 drwxr-xr-x 3 vagrant vagrant 4096 3月 15 01:36 2018 ./ drwx------ 28 vagrant vagrant 4096 3月 14 16:08 2018 ../ drwxrwxr-x 2 vagrant vagrant 4096 3月 15 01:36 2018 test_dir/ ./test_dir: 合計 12 drwxrwxr-x 2 vagrant vagrant 4096 3月 15 01:36 2018 ./ drwxr-xr-x 3 vagrant vagrant 4096 3月 15 01:36 2018 ../ -rw-r--r-- 1 vagrant vagrant 89 3月 14 03:30 2018 テストファイル.txt |
パーミッションも含めてちゃんと取得できていることが確認できました。
mirror コマンドですが、 -R オプションをつけると、ローカル → リモートへのミラーリングになります。
ローカルで編集した後、サーバーに反映するときに使いましょう。 その場合も、
mirror source [target]
の順序は変わらないですが、
source → ローカルディレクトリ
target → リモートディレクトリ(省略可) となります。
最後に、quit コマンドで、lftp を終了しましょう。
1 2 |
lftp xxxx.sakura.ne.jp:~/tmp/lftp_test> quit [vagrant@localhost lftp_test]$ |
お疲れ様でした!
コメント