それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Rsyncで除外ディレクトリを指定する。exclude オプション

Windowsのホームディレクトリを、バックアップ転送しようとして,いっぱい要らないファイルが転送されて焦った。自分で作ったrbsync 使っても良いんだけど、あれはデジカメとScanSnapを念頭に置いて作ってるので,サブディレクトリ処理や、ネットワーク越しの処理が甘いので,。。。

rsync で除外ディレクト

--exclude 羅列する

サンプル

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