いろいろとはまったのでメモ。
1. --delete-excludedオプション
--exclude-fromを使って一部のディレクトリーやファイルを対象外にすることはよくあるだろう。
この時、単に--deleteだけだと、--exclude-fromを変更する前にコピーしていたアイテムはdestから削除されることはない。
--delete-excludedをつけるとコピー対象から除外されるだけではなく、既にdestにコピーしていたものもdestinationから削除される。
具体的な使用例はこんな感じ。
rsync -av --delete --delete-excluded --exclude-from=/home/exclude /home/src/ /home/dest
2. NTFSとのやりとり
ext3同士とかならなんの問題もないがext3とNTFSの間でのrsyncの場合、いろいろ注意が必要。
-pオプションを使ってはダメ:NTFSではパーミッションが自由に設定できない。そのため、-pをつけていると、destにはパーミッションが異なる、違うファイルがあると判断して、srcのファイルをコピーする。つまり、差分をコピーしようとして結局は全ファイルをコピーすることになる。また-aオプションには-pが含まれているので注意。
--modifiy-window=1オプションが必要:NTFSのタイムスタンプの精度のため。destには時刻が異なる、違うファイルががあると判断して、srcのファイルをコピーするので。
具体的な使用例はこんな感じ。
rsync -rltDv --delete --delete-excluded --exclude-from=/home/exclude --modify-window=1 /home/src/ /mnt/ntfs/dest
3. --exclude-fromの書き方
rsync -av --delete --delete-excluded --exclude-from=/home/exclude /home/src/ /home/dest
というコマンドを考える。
/home/exclude に例えば bin と書いておくと、/home/src/bin だけではなく、/home/src/local/bin なども除外されてしまう。
/home/src/bin は除外したいが、/home/src/local/bin は含めたいという場合には、
/bin
と書く。実際のディレクトリーが /home/src/bin であっても単に /bin と書けばよい。ちょっと意外。