LFTPでローカルからリモートに複数のファイルがあるディレクトリ毎アップロードを行う方法を見ていきます。
ディレクトリ毎アップロードするには、
> mirror -R ローカルのディレクトリパス リモートのディレクトリパス
のコマンドを実行します。
※ダウンロードの場合は
> mirror リモートのディレクトリパス ローカルのディレクトリパス
今回は例として、ローカルが/home/***/ftp/ で、リモートが/home/pi/ftp/になります。
ファイルの構成はローカルが
$ tree /home/***/ftp /home/***/ftp ├── aaa │ └── sample.txt ├── bbb │ └── sample.txt └── cc
でリモートが
$ tree /home/pi/ftp /home/pi/ftp ├── aaa ├── bbb └── ccc
になります。
$ lftp ユーザ@ホスト
でリモート側に接続した後に、上記のディレクトリをアップロードしてみます。
> mirror -R /home/***/ftp/ /home/pi/ftp/ Total: 3 directories, 1 file, 0 symlinks To be removed: 0 directories, 1 file, 0 symlinks
リモートの方でディレクトリ構造を確認してみますと、
$ tree /home/pi/ftp /home/pi/ftp ├── aaa │ └── sample.txt ├── bbb │ └── sample.txt └── ccc
になっていて、ディレクトリ毎アップロードされていました。
mirrorで注意すべき点はファイルやディレクトリのパーミッションが転送元と同じになってしまいます。
ローカルの方が
$ ls -l /home/***/ftp total 0 drwxr--r-- 1 *** *** 20 Jan 16 05:16 aaa drwxr--r-- 1 *** *** 0 Jan 16 05:15 bbb drwxr--r-- 1 *** *** 0 Jan 16 05:15 ccc
でリモートの方が
$ ls -l /home/pi/ftp total 12 drwxr-xr-x 2 pi pi 4096 Jan 16 06:02 aaa drwxr-xr-x 2 pi pi 4096 Jan 16 08:14 bbb drwxr-xr-x 2 pi pi 4096 Jan 16 05:15 ccc
であった場合、mirrorを実行すると受信した方(今回はリモート)が
$ ls -l /home/pi/ftp total 12 drwxr--r-x 2 pi pi 4096 Jan 16 06:02 aaa drwxr--r-x 2 pi pi 4096 Jan 16 08:14 bbb drwxr--r-x 2 pi pi 4096 Jan 16 05:15 ccc
で自動でパーミッションが変更になり、Webアプリ開発等では意図しない挙動になってしまう恐れがあります。
mirrorコマンドを実行する時に
> mirror -R --no-perms ローカルのディレクトリパス リモートのディレクトリパス
--no-permsのオプションを追加すれば良いです。
ただ、慣れてくると--no-permsを付け忘れる恐れがありますので、mirrorを実行する場合は--no-permsを必ず付けるように設定します。
> exit
でリモートとの接続を終了し、LFTP用の設定ファイルを作成します。
$ micro ~/.lftprc
set mirror:set-permissions no
を追加して設定ファイルを保存します。
これで、意図しないパーミッションの変更を避けるようになりました。
.lftprcで設定できる内容は
$ lftp lftp :~> set -a
で確認できます。