2013年12月04日

【備忘録】robocopyコマンドの盲点

Windows上でファイルをコピーするとタイムスタンプが保存されますが、フォルダーをコピーするとタイムスタンプがコピーした日時になってしまうのが普通でした(空のフォルダーの場合には、条件によってタイムスタンプが保存される場合もあるようです)。

つい先日、robocopyというコマンド(Robust Copy「堅牢なコピー」という意味らしいです)を使って「/DCOPY:T」というスイッチを付けると、タイムスタンプを保ったままフォルダをコピーしてくれるという情報を耳にしました。
実際に試してみると、確かにそうなっているみたいです。
このコマンド、私の使っているWindows 7やWindows Server 2008 R2では標準でインストールされていました。

でも…。
「/MOVE」スイッチ(ファイルをコピーではなく移動する)を付けるとダメみたいなんですね。
ちょっと考えてみたんですが、「/MOVE」スイッチを付けると、コピーが成功したファイルやフォルダは消されてしまうので、消されたファイルなりフォルダが入っていた親フォルダの変更日時が変わってしまうから、ということみたいです。
でも、バカですよね。はっきり言って。
せっかくフォルダのタイムスタンプを保持するスイッチがあるんだから、親ディレクトリのタイムスタンプを覚えておいて後で書き戻すとか、そのくらいやってくれても罰は当たらないと思うんですが。
まあ、マイクロソフトを信じた私が一番バカだったのかもしれません。

ちなみに(ご存知の方も多いかと思いますが)Unix系のOSで同じことをするには、ソースディレクトリへ移動して
find -depth -print0 | cpio -0pvdm target-directory

みたいなことをします。
いちおう解説しておくと、findの-print0とcpioの-0オプションは、空白を含むファイル名でも取り扱えるようにするため。
findの-depthオプションは、深さ優先探索をするというオプションで、親ディレクトリのほうが後に処理されることになるため、ファイルのパーミッションの問題などがなくなります。
まあ、tarを使っても同じようなことはできますが、cpioのほうが汎用的だと思います。
posted by ぽそこし at 22:30| Comment(0) | TrackBack(0) | 備忘録 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック