スクリプトを上手に使って差分バックアップを取ってみよう!(簡易版)

みなさん初めまして。skrby1です。
この記事はスクリプトを使って、Macを便利に使ってみたい人向けの記事になります。

はじめに

みなさんはデータのバックアップとか取ってますか?自分は最近は「iCloudDrive」やら、「Dropbox」やら、「Googleのバックアップと同期」などのクラウドにデータを保存する事も多くなってきたのですが、その時に、データのバックアップを取るために、いちいちフォルダ内の全ての書類をバックアップ取っていて、最新の状態に置き換える処理をしていたのですが、何か楽に差分バックアップを取れる方法はないかな?と探していました。が、他人に方法を求めるのではなく、これは自分でいけるのではないか?と思うようになり、とうとう自力で差分バックアップを取る方法を見つけました!

必要なもの

  • ターミナルの基礎知識
  • Perl & シェルスクリプト(の知識)
  • AppleScript(の知識)
  • Alfred」や「KeyboardMaestro」のようなAppleScriptをショートカットに設定できる機能を持ったアプリ

この4つです!

どうぞコピペなどせずに、書いてあるスクリプトをご自分で打ち込んでみて下さい!
きっとこんな簡単な方法で差分バックアップって取れるんだ!って楽しくなると思います!
どうぞお楽しみに!

Perl & シェルスクリプトの解説

まずはこれをお使いのテキストエディタ(OS標準のテキストエディタで書く時はテキスト形式に変換して下さい)で打ち込んで頂いて(コピペでもいいですが、、、)、「diff-backup.pl」という名前で保存します(もちろん名前は各自好きなように決めて頂いて構いません)。保存するパスは次のステップで必要なので分かるようにしておいて下さい。
それと保存した後にターミナルで「chmod 755 diff-backup.plのパス」を実行して、実行権限をつけておいて下さい。

#!/usr/bin/env perl -w
use strict;
use File::Find;

my $from = $ARGV[0];
my $to = $ARGV[1];
my $answer = diff '$from' '$to';
$answer =~ s/^Only in (.+?): (.+)$/’$1$2/mg;
$answer =~ s/\n/’\n/g;

for (split(/\n/, $answer)){
cp $_ '$to';
}

これは、まずPerl内部で、シェルスクリプトの機能を使って、コピー元のフォルダにあって、コピー先のフォルダにないファイルのパスを抽出します。
お試しになりたい方は「diff-backup.plのパス ‘コピー元のフォルダのパス’ ‘コピー先のフォルダのパス’」をターミナルで実行してみて下さい。もうこれだけで、差分バックアップは取れます。良かったらダミーのフォルダとか用意して試してみて下さい。

AppleScriptの解説

次にこれを「スクリプトエディタ」を使って打ち込んで下さい。
「diff-backup.plのパス」の所はご自分が前の段階で保存したパスに書き換えて下さい。
※「diff-backup.plのパス」の後ろに半角のスペースを一つ開けるのを忘れないで下さいね!!

set v_from to POSIX path of (choose folder with prompt “バックアップしたいフォルダを選択してください”)
set v_to to POSIX path of (choose folder with prompt “バックアップ先のフォルダを選択してください”)

set v_from to “‘” & v_from & “‘”
set v_to to “‘” & v_to & “‘”

set v_shell to “「diff-backup.plのパス」 ” & v_from & ” ” & v_to
do shell script v_shell

これは、コピー元のフォルダとコピー先のフォルダを指定して、パスを取得して、前の段階の「diff-backup.pl」をdo shell scriptで起動します。
これを「差分バックアップ用.applescript(テキスト形式)」で保存します(これもファイル名は各自好きな名前にして頂いて構いません)。もしこの段階でアプレットとしたければ、ファイル形式の選択で、「アプリケーション」を選択すればOKです。
もしくは、スクリプトメニューを出していれば、Finderのスクリプトメニューのフォルダにいれても使えます(その場合はテキスト形式でも、スクリプト形式でも大丈夫です)!

ショートカットの作成

後は、前の段階で保存したAppleScriptをショートカットで起動できればなんでもいいのですが、自分はKeyboardMaestroというランチャーアプリを使用しているので、それで設定する方法をご紹介します。

おわりに

これで全て設定が完了です!これで後はFinder上で自分の指定したショートカットを押せば、コピー元のフォルダとコピー先のフォルダを指定して、差分バックアップが取れます!しかもcpコマンドの処理が早いらしく、Finder上でのコピーのダイアログも出ないぐらい素早くコピーしてくれます!
これで余計な上書きコピーをせずに、コピーに必要なファイルだけコピーしてくれるようになります。

いかがでしたでしょうか?たった数行のスクリプトを使うだけで、本来ならアプリを使わないとできなかった事も、標準の機能でできるようになります(最後のショートカットを設定するところでは商用アプリを使用しましたが、、、)!
だからMacが好きなんですよねー、自分は。
やる気と根気さえあれば、ちょっとした事は自力で解決できるようになっております!!
皆さんもこんな事できたらいいなぁっていう希望があったら、それ用のアプリを探すのももちろんいいですが、自力でなんとかできないかなぁ?って考えてみるのもおすすめです!
もちろんスクリプトの最低限の知識は必要ですが、勉強した事は無駄にはならないので、是非ともご興味が湧いた方はスクリプトのお勉強されるといいと思います!

今後の展望

現段階では、コピー元のフォルダの中にあって、コピー先のフォルダの中にないものしか抽出されませんが、今後はコピー先のフォルダにファイルがあっても新しく更新したファイルがある時にもバックアップが取れるようにしたいと思っています。
それが叶った時は改めて今回の記事の改訂版として新たにポストしますので、どうぞご参考になさって下さい。

それでは!!良いMacライフをお過ごし下さい!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です