lftpコマンドを使ってFTPサーバとデータを同期する方法

更新:2019.11.19 views:11

目次

使用している環境について

WSLを使ってubuntuをインストールしています。 バージョンは次のとおりです。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

ubuntuの場合は、cat /etc/lsb-releaseコマンドでディストリビューションのバージョンを調べることができます。

lftpのインストール

lftpコマンドを使用するためにはインストールする必要があります。 次のコマンドを実行するとインストールできます。

sudo apt install lftp

実行方法

lftpを使って対話型でサーバへファイルをアップロードする方法もありますが、今回はスクリプト実行する方法を紹介します。

lftpのスクリプトファイル書いておき、実行時にそのファイルを指定することでスクリプト実行できます。

実行方法は下記のような形になります。

lftp -f [スクリプトファイル名]

まず、適当なファイル名でスクリプトファイルを作成して、処理を記述します。

vi scriptname

下記のように記述します。 これは、FTPサーバからローカルへファイルをダウンロードしてくる例です。

open -u user,pass xxx.xxx.xxx.xxx
mirror /server/path /local/path
echo end
close
quit

スクリプトファイルを作成したら、lftpコマンドのパラメータにスクリプトファイルを指定して、実行します。

lftp -f scriptname

スクリプトファイルの簡単な説明

スクリプトファイルに記述するコマンドを説明します。 openはFTPサーバへ接続します。

open -u [ユーザー名],[パスワード] [FTPサーバのIPかホスト名]

mirrorは、同期元の内容を同期先へ処理を行います。

mirror [オプション] [同期元] [同期先]

実行前のイメージでは次のようになっています。

同期元 同期先
fileA fileC
fileB

実行すると次のようになります。

同期元 同期先
fileA fileA
fileB fileB
fileC

ミラーリングを試行する

間違って記述してしまったスクリプトを実行してしまうと困ったことになります。 そのため、--dry-runオプションを使って試行できます。

mirror --dry-run --log=test.log /server/path /local/path

--log=test.logオプションを付けておくと、指定した場所に試行した結果のログが出力されます。

ログの内容を確認して、スクリプトの記述に間違いが無いか確認しましょう。

FTPサーバへデータをアップロードする

「-R」オプションを付けることで、ローカルのデータをFTPサーバへアップロードできます。 この例では/local/pathの内容を/server/pathにアップロードしています。

mirror -R /local/path /server/path

さらに、「–delete」オプションを付けることで、同期先にのみ存在するファイルを削除する事ができます。 この例では、サーバにのみ存在するファイルは削除され、ローカルと同じ状態になります。

mirror -R --delete /local/path /server/path

--only-newerオプションを付けると、更新されているファイルだけがアップロード対象になります。

mirror -R --delete --only-newer /local/path /server/path

特定のファイルを対象外にしたい

-Xオプションを使用すると特定のファイルやディレクトリを除外する事ができます。

mirror -R -X .git/ -X .desktop.ini -X .DS_Store --delete --log=lftp.log /local/path /server/path

このようにしておくと、.git/ディレクトリ、 .desktop.iniファイル、.DS_Storeファイルが同期対象から除外されます。

最後に私がよく使うスクリプトを紹介

ローカルの画像ファイルディレクトリとサーバのディレクトリを同期しています。

スクリプトの内容。

open -u user,pass xxx.xxx.xxx.xxx
mirror -R -X .desktop.ini -X .DS_Store --delete --log=lftp.log /local/path /server/path
echo end
close
quit

実行するときは、lftp -f lfptscriptのようなコマンドを書いたmirror.shシェルスクリプトを実行しています。

Linux関連記事










これからブログなどのサイトを作りたいと思っている人は、お名前.comでのドメイン取得がオススメです。

■□━━ 急げ、ドメインは早い者勝ち! ━━□■
     ■お名前.com

アマゾンの2019年本屋大賞一覧

そして、バトンは渡された
ひと
ベルリンは晴れているか
熱帯
ある男

楽天市場のおすすめ商品一覧

お金2.0 新しい経済のルールと生き方 [ 佐藤航陽 ]
全部レンチン!やせるおかず 作りおき 時短、手間なし、失敗なし
「読む力」と「地頭力」がいっきに身につく 東大読書 [ 西岡 壱誠 ]