以前LFTPでサーバー間のディレクトリを同期する方法を書きましたが、rsyncを使って同期する場合と違いディレクトリ指定の仕方が異なりましたので、例を挙げながら検証結果を書いていきます。
rsyncの場合
rsyncでディレクトリの中身を同期する場合、下記のようなコマンドになります。
rsync -av /home/analyzegear.co.jp/ /home/test.analyzegear.co.jp/
lftpの場合
rsyncの場合と同様に下記のように指定すればディレクトリの中身が同期されると思っていたのですが、結果は予想と違い同期元の末尾のディレクトリが同期先ディレクトリ内に作られその中に同期されてしまいました。
mirror --delete /remote/home/analyzegear.co.jp/ /local/home/test.analyzegear.co.jp/
lftpのディレクトリ指定方法検証
パス末尾のスラッシュ有無や異なるディレクトリなど4つのパターンを検証します。
末尾のディレクトリ名が同じでスラッシュで終わっている場合
同期元と同期先で末尾のディレクトリ名が同じ場合、ディレクトリの中身が同期されました。
mirror --delete /remote/home/htdocs/ /local/home/htdocs/
末尾のディレクトリ名が異なりどちらもスラッシュで終わっている場合
同期元と同期先で末尾のディレクトリが異なる場合、同期元ディレクトリ(htdocs)が同期先ディレクトリ配下に生成されてその中に同期されてしまいました。
mirror --delete /remote/home/htdocs/ /local/home/public_html/
末尾のディレクトリ名が異なりローカルディレクトリのみスラッシュで終わっている場合
2つ目の検証コマンドから同期元の末尾のディレクトリのスラッシュを外してみました。こちらはrsyncでも同様ですが、ディレクトリ本体が同期先ディレクトリ配下に生成されてその中に同期されました。
mirror --delete /remote/home/htdocs /local/home/public_html/
末尾のディレクトリ名が異なりどちらもスラッシュで終わっていない場合
最後は末尾のディレクトリを異なるものを指定しスラッシュも外してみました。こちらはディレクトリの中身が同期されました。
mirror --delete /remote/home/htdocs /local/home/public_html
まとめ
LFTPでサーバー間のディレクトリを指定する際は、末尾のディレクトリ名が同じ場合はスラッシュをつけても外してもどちらでもいいですが、名前が異なるディレクトリ間で同期する場合は、スラッシュを外して同期する必要があります。
コメント