LFTPで複数のファイルをアップロードする

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

で確認できます。

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。