2015年7月3日金曜日

PC Robocopy 対象ファイルの比較とクラス

いつもお世話になっている Robocopy ですが、
ふたつのフォルダ内でファイルの状態を比較して処理する、とは 以前にも書きました。
でも、認識違いがありましたので、 ここに、纏めて置きます。
Robocopy と ファイルのクラスです。


先ずは、 おさらい。


転送元と転送先のフォルダでのファイルの状態を比較し、処理します。
比較結果は、クラス と言う概念で 分類されます。

クラス 説明
Lonely L 転送元には存在するが転送先に存在しないファイル
Same S 転送元と転送先両方に存在し、タイムスタンプもサイズも属性も同じファイル
Tweaked T 転送元と転送先両方に存在し、タイムスタンプもサイズも同じだが,属性だけが異なるファイル
Changed C 転送元と転送先両方に存在し、タイムスタンプは同じだが,サイズ異なるファイル
Newer N 転送元と転送先両方に存在するが、転送元のタイムスタンプの方が新しいファイル
Older O 転送元と転送先両方に存在するが、転送元のタイムスタンプの方が古いファイル
Extra X 転送元に存在しないのに転送先に存在するファイル
Mismatched 転送元のファイルと同名のディレクトリが転送先にある(あるいはその逆)

Lonely 以外では、デフォルトではChanged と Newer と Olderがコピーされます。
ファイルクラス毎にコピーするかどうかを変更するのに/XC /XN /XO /XX /XL /IS /ITなどのオプションを使用します。
Extraファイルを転送先フォルダから削除するには,/PURGEか/MIRオプションを指定します。
ファイル名スケルトンで 除外するファイルを 指定するオプションは /XF ファイル [ファイル] です。


さて、良く読んで下さい。

クラス Older つまり、 転送元と転送先両方に存在するが 転送元のタイムスタンプの方が古いファイル も上書きする! のです。



実は、私の運用方法は、通常は、ワンウェイ です。
つまり、バックアップや予備を保存して置く為に Robocopy を運用しています。
この状態では、 まず Older 転送元のタイムスタンプの方が古いもの は現れません。  出現率は 今迄は 皆無 でした。
可能性として、
ファイルの破損や誤操作から ファイルを このバックアップ領域以外(例えば、OS 標準の 以前のバージョン)から修復し、
バックアップ領域が最新状態で、転送元が少し前の状態にも係らず、 強引に(間違って) Robocopy を動かしてしまう、
そんな状況しか思い浮かばないのです。
謂わば、人的ミスによる、新旧の上書き戻し が発生する 可能性がある訳ですね。

元々、頻繁に、ファイルの書き換えが行われ、時系列を戻す可能性のあるもの(例えば、ソースファイル類)については、
単純に Robocopy を稼動させる訳ではなく、 日付やバージョンを認識出来る サブフォルダ を設けて そこに コピーしたりします。
この場合、転送先は、常に、既存のファイルが無い状態 での運用になりますね。
この考え方は、履歴管理 等とも呼ばれます。



Robocopy の挙動が、上記の様に、 転送元の 状態を 転送先に 再現する 仕様 になっている点は 知っておかれた方が良いでしょう。



0 件のコメント:

コメントを投稿