ファイルの中身に差分があるファイルだけrsyncする
ファイルの中身に差分がある場合だけrsyncします。ファイルの中身が同じ場合は、タイムスタンプが違っていてもコピーしません。タイムスタンプの違いは無視です。
Last Update : 2014年02月04日
ファイルの中身に差分があるファイルだけrsyncする 目次
1. rsync の checksum オプション
rsyncにchecksumというオプションがあります。
checksum(チェックサム)というのは、転送元と転送先でデータに誤りがないかを確認する仕組みの事です。 転送元のファイルと転送先のファイルでそれぞれある計算を元にファイルのデータから値を算出し、算出した値が一致するかを調べます。 算出した値そのものをチェックサムと呼ぶ場合もあります。
rsync に checksum オプションをつけると、コピー元とコピー先でファイルのチェックサムが確認され、 コピー先で既に存在する同じチェックサムとサイズを持つ同じ名前のファイルはスキップされます。
その結果、ファイルの内容に差分あるファイルだけがコピーの対象となります。
2. 差分ファイルだけrsync
実際に差分ファイルだけを対象に rsync してみます。
rsync 書式
rsync [option] コピー元 コピー先
※ オプションの説明はここでは省略します。
中身は同じで、タイムスタンプが異なるファイルをrsync
中身の同じファイルを作成 # echo aaa > source/test.txt # echo aaa > dest/test.txt タイムスタンプを変更 # touch -t 201402040000 dest/test.txt 中身は同じで、タイムスタンプが異なるファイルがある # ls -l ./* ./dest: 合計 4 -rw-r--r--. 1 root root 4 2月 4 00:00 2014 test.txt ./source: 合計 4 -rw-r--r--. 1 root root 4 2月 4 09:01 2014 test.txt checksum オプションをつけてrsyncする # rsync --checksum -av source/test.txt dest/test.txt sending incremental file list sent 52 bytes received 15 bytes 134.00 bytes/sec total size is 4 speedup is 0.06 タイムスタンプは異なるが、中身に差分がないのでコピーされない。
中身は異なるが、同じタイムスタンプで、同じサイズのファイルをrsync
中身が違うファイルを作成 # echo aaa > source/test.txt # echo bbb > dest/test.txt タイムスタンプを揃える # touch -t 201402040000 source/test.txt # touch -t 201402040000 dest/test.txt 中身は異なるが、同じタイムスタンプで、同じサイズのファイルがある # ls -l ./* ./dest: 合計 4 -rw-r--r--. 1 root root 4 2月 4 00:00 2014 test.txt ./source: 合計 4 -rw-r--r--. 1 root root 4 2月 4 00:00 2014 test.txt checksum オプションをつけてrsyncする # rsync --checksum -av source/test.txt dest/test.txt sending incremental file list test.txt sent 96 bytes received 31 bytes 254.00 bytes/sec total size is 4 speedup is 0.03 中身に差分があるのでコピーされる。