シンプルなバックアップツール『pysync』


簡単に差分バックアップ・同期ができるPythonスクリプト『pysync』(拙作)の紹介です。

pysyncとは

itmammoth/pysync – A simple backup/sync tool with python & rsync

拙作のPythonスクリプトで、一言で言ってしまえばrsyncのラッパーです。もともとrsyncでバックアップしていたのですが、excludeやらfilterやらのオプション指定が面倒くさいのと、バックアップ対象によっては細かく除外条件等を変更したかったので、Pythonでラッパーを書くに至りました。rsyncを使っているのでMac/Linuxで動きます。(Windowsにはrsync無いよね・・??)

使い方

基本的にはgithubのREADME通りですが、ここでは同内容の日本語による説明とMac向けのtipsを付け加えようと思います。

まずはインストールから。

📄~/.config/pysync.json
$ pip install itm.pysync

pipでインストールが完了すると、pysyncというコマンドが使用できるようになります。基本的にはこいつを実行するだけなのですが、バックアップの設定を先に作っておく必要があります。

ファイル名とファイルの格納場所なのは任意なのですが、pysyncは~/.config/pysync.json, ~/pysync.jsonの順に設定ファイルを探しに行くようになっているので、このどちらかのパスにしておいたほうがラクです。

では設定ファイル(サンプル)を見てみましょう。

{
    // rsyncのオプションを指定 (デフォルト: -a -v -h)
    "rsync_options": ["-a", "-v", "-h", "--delete", "--iconv=UTF-8-MAC,UTF-8"],

    // rsyncのフィルターを定義
    "filters": {
        "git": ["-C", "--filter", ":- .gitignore"]
    },

    // 全てのソースでexclude(除外)するファイル・ディレクトリのパターン
    "global_exclusions": [".DS_Store"],

    // 同期先を指定
    "destination": "/Volumes/HDD/backup",

    // 同期元を指定
    "sources": [
        {
            "path": "/Users/whoami/Documents"
        },
        {
            "path": "/Users/whoami/Pictures",
            "exclusions": ["*.photoslibrary", "secrets/"]    // このソース内でのみ適用されるexcludeパターン
        },
        {
            "path": "/Users/whoami/Programs",
            "filter": "git"     // このソース内でのみ定義済みフィルターを使用
        }
    ]
}

上記の設定だと、同期元となるのは

  • /Users/whoami/Documents
  • /Users/whoami/Pictures
  • /Users/whoami/Programs

の3つのディレクトリです。これらが/Volumes/HDD/backupディレクトリに同期されることになります。--deleteオプションが付いているので、同期元で削除されたファイルは同期先からも削除されます。このあたりはrsyncの知識がないと難しいかもしれません。。。

global_exclusionsに.DS_Storeを指定しているので、Macで勝手に作成される邪魔ファイル(?)は除外されます。また、Picturesディレクトリ内では、ソース個別の除外設定をしています(*.photoslibrary, secrets/)。

filtersというのはrsyncの引数に渡すfilterを定義しておき、ソース個別の設定で使用できるようにします。Programsディレクトリ内ではgitフィルターが使用されているので、.gitを除外し、さらに.gitignoreの内容に沿った除外までしてくれます。ただこのオプションはrsyncのバージョンが古いと使えないみたいです。

自分好みの設定jsonを書いたら、次のコマンドで実行です。

$ pysync

うまくバックアップが完了したでしょうか?

ちなみに、設定ファイルのパスを指定する場合は

$ pysync -c <設定ファイルへのパス>

でOKです。

rsyncをラップしただけですが、我ながら使い勝手はいいです。シンプルなバックアップツールを探している方、ぜひどうぞ。

【Tips】Macのrsyncについて

Macのrsyncってバージョンが古く色々不便なのでhomebrewで新しいのを入れておくことをオススメします。

$ brew install rsync

またrsync -vでログを出力する際にそのままだと日本語が文字化けしてしまいます。これを解消するにはiconvを使用します。

$ brew install libiconv

rsyncのオプションに–iconv=UTF-8-MAC,UTF-8を指定します。これをpysyncで実現するには、

"rsync_options": [..., "--iconv=UTF-8-MAC,UTF-8"],

というふうに指定します。

関連する記事


コメントする

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください