robocopyをフォルダ差分チェックとして使ってみる
RichCopyとrobocopyを使ってみた で紹介した robocopy ですが、テストモードを使えばフォルダの比較ツールとしても利用できそうです。
フォルダ内のファイル比較ツールはいろいろあるんですが、ネットワーク越しの共有フォルダで数十GBものビジネスファイルの比較となると大抵のフリーのツールでは相当時間がかかるんですよね。
ところが、robocopyはそれらに比べかなり高速なチェックができました。
robocopy で /L オプションを付けるとテストモードとなり、コピーは行わずログだけの表示・出力になります。これでフォルダの差分がチェックできるわけです。
ただ完全なフォルダ比較ツールではないので出力されるログの情報も少ないですが、少なくとも差異があるファイル、タイムスタンプが異なるのかサイズが異なるのかコピー元コピー先どちらにあるのかなどの情報はでます。
例えば3流PGがバックアップがちゃんとされているかを知るためにフォルダ比較するコマンドは下記のような感じです。
robocopy \\filesv\data \\backsv\bkup /L /E /XO /Z /R:1 /FFT /TS /XD 除外フォルダ /LOG:D:\フォルダ比較結果.txt
各オプションは下記のような意味です。
/L : テストモード(つまりフォルダ差分比較として利用)
/E : サブディレクトリも対象(空のフォルダも含める)
/XO : 比較元が比較先よりタイムスタンプが古いファイルを除外(Olderファイルを除外)
/Z : 再開可能なモードで実行
/R:1 : リトライ1回
/FFT : タイムスタンプ精度を2秒(NAS対策。NASじゃないならいらないかも)
/TS : 比較元ファイルのタイムスタンプを出力
/XD : 指定したフォルダを除外
/LOG : ログを指定したファイルに出力。
ただ、/TSで出力したタイムスタンプですが、WindowsServer2003リソースキット版のrobocopyは世界標準時が出力されてしまいます。ここは注意しないといけませんね。
ログのところで、ファイルの比較結果、どのような差異の状態か(ファイルクラス)が出力されます。
主なファイルクラスとして下記のような物があります。
Lonely : 転送元には存在するが転送先に存在しないファイル
Same : 転送元と転送先両方に存在し,タイムスタンプもサイズも属性も同じファイル
Tweaked : 転送元と転送先両方に存在し,タイムスタンプもサイズも同じだが,属性だけが異なるファイル
Changed : 転送元と転送先両方に存在し,タイムスタンプは同じだが,サイズ異なるファイル
Newer : 転送元と転送先両方に存在するが,転送元のタイムスタンプの方が新しいファイル
Older : 転送元と転送先両方に存在するが,転送元のタイムスタンプの方が古いファイル
Extra : 転送元に存在しないのに転送先に存在するファイル
Mismatched : 転送元のファイルと同名のディレクトリが転送先にある(あるいはその逆)
WindowsServer 2008(Vista)移行だと上記のファイルクラスの一部が日本語になってたりするようです。
処理時間も数万ファイルあっても数分で終わるところがうれしいですね。