9885


emacsでファイルを保存するたびにファイルをバックアップする設定を施しています。  
現在init.elに定義してあるコードは以下になります。

[code]

    ;; バックアップファイルを世代管理して保存先を変更します。
    (when (setq make-backup-files t)
      (setq backup-directory-alist
        (cons (cons "\\.*$" (expand-file-name "~/.emacs.d/backup"))
          backup-directory-alist))
      (setq version-control t)       ;; 複数のバックアップ世代を管理します。
    ;  (setq kept-old-versions 16)    ;; 古いものをいくつ残すか
      (setq kept-new-versions 256)   ;; 新しいものをいくつ残すか
      (setq delete-old-versions t)   ;; 確認せずに古いものを消します。
      (setq vc-make-backup-files t)) ;; バージョン管理下のファイルもバックアップを作ります。
    
    ;; 保存するたびにバックアップファイルを作成するようにします。
    (global-set-key (kbd "C-x C-s")
     '(lambda () (interactive) (save-buffer 16)))
    
[/code]

これでファイルを保存する度に`~/.emacs.d/backup`にバックアップファイルが作成され、ときどき消してしまったコードなどを復活させるために何度か助けられています。

すごく便利なのですが、`~/.emacs.d/backup`のなかに大量のファイルが作成され、dirredなどでディレクトリにアクセスするとものすごく重たいです。

これを１日毎に`20150507`というようなディレクトリを作成し、そこにバックアップファイルが保存されるようにしたいのですが、`emacs
lisp`にあまり詳しくないのでわかりませんでした。

投げっぱなしになっているような気もしますが、よろしければ改変したコードを教えていただけないでしょうか。


CC BY-SA 3.0
2015-05-06T23:05:44.993
9875
2020-05-16T22:58:28.327
2020-05-16T22:58:28.327
19110
5840
question
emacs elisp
Emacsで編集したデータを1日毎にディレクトリを分けてバックアップしたい


[EmacsWiki: Bakcup
Directory](http://www.emacswiki.org/emacs/BackupDirectory#toc3)のページにバックアップの作成例が載っています。参考にしてみてください。

私は上記のページを参考にしたコードを利用しています。

[code]

    (defun my:make-backup-file-name (file)
      (let ((dirname (file-name-as-directory
                      (format-time-string
                       (expand-file-name "backup/%Y-%m-%d/" user-emacs-directory)))))
        (or (file-directory-p dirname)
            (make-directory dirname t))
        (expand-file-name (file-name-nondirectory file) dirname)))
    
    (setq make-backup-file-name-function #'my:make-backup-file-name)
    
[/code]

これを`.eamcs`に記述すると`~/.emacs.d/backup/2015-05-07/XXX.txt`のように日付毎にディレクトリを分けてファイルをバックアップしてくれます。

テキストファイルが大部分なので容量的にはあまり気にしないとは思いますが、バックアップされたファイルは自動では削除されないため放っておくとどんどん増えます。古いものは定期的に削除したほうが良いでしょう。


CC BY-SA 3.0
2015-05-07T05:54:02.617
9885
2015-05-07T05:54:02.617
2391
9875
answer


もう既に「議題に沿った」回答がついているのでこれは蛇足なんですけど  
日別バックアップ取るくらいなら SCM (ソースコード管理ツール) で履歴管理するといいです。

git とか mercurial とか導入しましょう。一度使ったら手放せなくなります。  
既に使っている上での質問ならごめんなさい。


CC BY-SA 3.0
2015-05-07T23:13:48.373
9923
2015-05-07T23:13:48.373
8589
9875
answer