backup-each-save 20130704.732(in MELPA)
backup each savepoint of a file

概要

<2015-02-03 Tue> real-auto-save.el と組み合わせるといいです。

あなたは大切なデータを失ってしまったことはないでしょうか?

たとえ毎日 バックアップ をとっていたとしても、
それでも事故ってしまうことがあります。

複数のメディアに日々のバックアップをしていれば
データそのものを失う危険性は限りなく低くなります。

しかし、怖いのは間違って 上書き保存 してしまうことです。

別のコンピュータから古いデータを持って来て上書き保存してしまったり、
2つのコンピュータで別々の変更をしてマージせずに保存してしまったり、
その後でそのデータが自動バックアップされてしまったら…
目も当てられませんね。

そこで、Emacsで編集するファイルに限定されますが、
保存したときにバックアップディレクトリに日時付きで
バックアップしてしまえば、怖いことはありません。

日時付きバックアップとは
たとえばホームディレクトリが/rのとき、

/r/memo/wp/1411020955.org
↓
/r/.emacs.d/backups/r/memo/wp/1411020955.org-141102_101949

のように別な場所に保存されることです。

C-x C-sするたびにバックアップディレクトリにバックアップが保存されるので、
バックアップディレクトリの容量には注意してください。

とはいえ、このEmacs Lispは初出10年前だし、テラバイト時代の今では
高々テキストファイルの逐次バックアップくらいは問題ないです。

auto-save-buffers-enhanced.el(レビュー)
real-auto-save.el(レビュー) と組み合わせて
自動保存させてしまえばまさに鉄璧です。

日々のバックアップ+リモートバックアップもしてしまえば
災害でパソコンが破壊されてしまってもデータが失われることは
もはや有り得なくなります。

データ消失に対する万全の対策はなによりも安心です。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてbackup-each-saveを使う方は
以下のコマンドを実行します。

M-x package-install backup-each-save

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name backup-each-save

設定 141102094122.backup-each-save.el(以下のコードと同一)

;;; バックアップ先
(setq backup-each-save-mirror-location "~/.emacs.d/backups")
;;; バックアップファイルにつけるsuffix
(setq backup-each-save-time-format "%y%m%d_%H%M%S")
;;; バックアップするファイルサイズの上限
(setq backup-each-save-size-limit 5000000)
;;; バックアップ作成するファイルを判定
;; (defun backup-each-save-backup-p (filename)
;;   (string-match
;;    ;; ファイル名に/sync/が含まれるときのみバックアップする
;;    (rx (or "/sync/"))
;;    (file-truename filename)))
;; (setq backup-each-save-filter-function 'backup-each-save-backup-p)
;;; すべてのファイルをバックアップする
(setq backup-each-save-filter-function 'identity)
;;; 有効化!
(add-hook 'after-save-hook 'backup-each-save)

実行方法

$ wget http://rubikitch.com/f/141102094122.backup-each-save.el
$ emacs -Q -f package-initialize -l 141102094122.backup-each-save.el

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。