簡単に差分バックアップ・同期ができる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"],
というふうに指定します。
関連する記事
- Google AIY Voice Kit V2をキーボード・モニター無しでセットアップして日本語会話まで
- ラズベリーパイに日本語で喋らせる[その3]Open JTalk
- 【ラズパイ】Voice KitにSnowboyを入れてホットワードでSwithBotを操る【よしこちゃん】
- Ubuntu 22.04インストールしてからやること
- 【解決】mysql-connector-pythonでメモリリーク