Windowsのホームディレクトリを、バックアップ転送しようとして,いっぱい要らないファイルが転送されて焦った。自分で作ったrbsync 使っても良いんだけど、あれはデジカメとScanSnapを念頭に置いて作ってるので,サブディレクトリ処理や、ネットワーク越しの処理が甘いので,。。。
サンプル
Windowsのユーザーホームディレクトリのバックアップ
除外ディレクトリ指定する のは --exclude を羅列する。
rsync -ave --exclude='AppData/' --exclude='Application Data' --exclude='Cookies' --exclude='Local Settings' --exclude='My Documents' --exclude='NetHood' --exclude='ntuser.*' --exclude='NTUSER.*' --exclude='PrintHood' --exclude='Recent' --exclude='Templates' --exclude='スタート メニュー' --exclude='SendTo' --exclude='Favorites' --exclude='Searches' --exclude='Downloads' --partial '/home/takuya/' //192.168.2.5/mnt/takuya/test
--exclude でいっぱい指定する。コレがシンプルで楽ちん。
除外、含める一覧ははファイルでも指定できる。
- --exclude=PATTERN
- exclude files matching PATTERN
- --exclude-from=FILE
- read exclude patterns from FILE
- --include=PATTERN
- don't exclude files matching PATTERN
- --include-from=FILE
- read include patterns from FILE
- --files-from=FILE
- read list of source-file names from FILE
ためしてみた。いまいち。理由は結局,rsync を1枚のシェルスクリプトに書いちゃうので。
symfony とか cakephp とか rails といったプロジェクト系なら役に立つけど,個人でバックするなら、要らない
バックアップを取るRubyスクリプトにしてみた。
Windowディレクトリのバックアップ転送を定期的にコマンド実行するのはイロイロ捗りそう。
Rubyで書くと遅い(*実行時間,ライブラリ準備とか)ので,Rsync部分はシェルを使うことに。
僕の場合,Cygwinのある環境とかWin7とかWinXPが混じるので,ちょっと
#!/usr/bin/env ruby $KCODE="u" ##excludes_name_set def home_excludes() Dir.chdir('C:/Users/takuya') windows_specifics = [ "AppData/","Application Data","apps","Cookies","Local Settings", "My Documents","NetHood","ntuser.*","NTUSER.*", "PrintHood","Recent","Templates","スタート メニュー", "SendTo","Favorites","Searches","Downloads" ] cygwin_specifics =[ ".android",".local",".lesshst",".bash_history", ".irb_history",".w3m",".Xauthority",".nx",".vim", ] return cygwin_specifics+windows_specifics end ###main excludes = home_excludes.map{|e| "--exclude='#{e}'"}.join(' ') cmd = "rsync -ave #{excludes} --partial '/home/takuya/' //192.168.2.5/mnt/takuya/test" require "kconv" require "stringio" $stderr = StringIO.new IO.foreach("|#{cmd}"){|line|puts line}
便利ですね。Rsync。