n-Archives.net

Robocopy /MIRオプションの動作と注意点

目次

/MIRオプションはRobocopyの基本

Robocopyにはオプションの種類がたくさんありますが、多くのユーザが知っておくべき基本オプションはほんのわずかな限られたオプションだけだと思います。中でも/MIRオプションは、コピー元フォルダをそっくりそのままコピー先に再現するミラーリングを行うことができるとても便利なオプションです。極端な話、このコマンドだけ知っていればよいくらいの基本オプションだと思います。

 

/MIR オプションの基本動作

/MIR オプションの基本的な使い方は以下のようなコマンドになります。(/DCOPY:DATを付けているのはフォルダの日付もコピー元と同じにするオプションです。なくてもコピーはできますが、個人的には必ずつけてます。)

robocopy <コピー元フォルダ> <コピー先フォルダ> /MIR /DCOPY:DAT

サブフォルダも含め、コピー先フォルダがコピー元と全く同一になるよう、ファイルのコピーおよび削除を行います。コピー元、コピー先それぞれに存在するかどうかにより以下のように処理が行われます。

Robocopy /MIRの基本動作
コピー元 コピー先 実行動作
存在する 存在する 更新されていればコピーする
存在する 存在しない コピーする
存在しない 存在する コピー先ファイルを削除する

具体的な例としては以下のようになります。

 

コピー実行後、コピー先はコピー元と同一になります。コピー元にはなく、コピー先にのみ存在するファイルが削除されることに注意してください。サブフォルダ配下も全て同様に処理されます。

 

参考記事:「Robocopyコマンド: /DCOPY:DATのすすめ

 

/MIR と /E との違い

/E オプションも、「サブフォルダを含むフォルダ配下全体をコピー」するオプションですが、コピー先のファイルの削除を行いません。/E オプションの動作を例で説明すると以下のようになります。

 

コピー先がまだ存在しない状態で、最初に /E でコピーした場合は、当然、コピー先はコピー元と同一になります。しかし、同じフォルダに2回以上/E で上書きコピーする場合は、コピー先のファイルが削除されることはなく、過去のファイルが残るため、コピー後は、コピー先とコピー元が同一にはなりません。

コピーの目的にもよりますが、「過去のファイルを削除することなくなるべく保存しておきたい」ということであれば /E オプションを使うことでよいと思いますが、コピー先フォルダに、すでに削除されたファイルも残ってしまうため、フォルダを丸ごと以前の状態に復元することが困難になるという問題があります。

実際には、データのバックアップを行う場合、「コピー元と同一の状態をコピーしておきたい」というケースがほとんどだと思いますので、多くの場合 /MIR オプションを使うことになるのではないかと思われます。もし、過去のファイルを保存しておく必要があるのであれば、複数世代のバックアップを保存しておけばよいのではないかと思います。


/MIR は /E /PURGE と同等であるとされています。/PURGE オプションは、コピー元になく、コピー先にだけ存在するファイルを削除するオプションです。ただし、1点だけ処理に異なる点があり、コピー先にフォルダが存在する場合、/MIRはセキュリティ設定をコピーしますが、/E /PURGEはコピーしません。

 

参考記事:「RoboSync設定事例:フルバックアップ3世代

 

/MIRオプションで最も注意しなければならないこと

とても便利な /MIR オプションではありますが、特に以下の点には注意してください。

コピー元、コピー先の指定を誤ると破滅的な結果を招きます。

コピーコマンドを誤ると大きな被害が生じることは/MIRに限った話ではないのですが、特に /MIR では、コピー元に存在しないファイルはコピー先から削除されてしまうため、コピー元やコピー先に間違ったフォルダを指定してしまった場合、コピー先フォルダのほとんどのファイルが削除されてしまうなどといった事態になります。コマンドを入力する際には十分注意しましょう。

Robocopyのコマンドを実際に実行する前には、/L オプションを使い、どのようなコピー処理が行われるかを事前に試して見ることを強くお勧めします。詳細は以下記事ご参照ください。

 

参考記事:「RoboSync TIPS: /Lオプションをつけて実行結果をプレビューする

 

ファイル指定、除外指定時の動作

/MIRオプションは、コピー先をコピー元と同一にするというという処理を行いますが、ファイル指定、除外指定をする場合には少し注意が必要です。除外されたファイルについては、何も処理が行われないため、コピー先に古いファイルが残ってしまうことがあるのです。

この、ファイル指定、除外指定時の動作は、/MIR オプションの動作というより、robocopyの動作になりますが、以下で処理について説明したいと思います。

 

ファイル指定と /MIR の動作

ファイル指定は、コピーするファイルを限定する場合に指定します。以下のように指定します。

robocopy <コピー元フォルダ> <コピー先フォルダ> <ファイル> /MIR /DCOPY:DAT

<ファイル> の部分にコピー対象とするファイル名のパターンを指定します。ファイル名を指定することもできますし、ワイルドカードを使ってパターンを指定することもできます。使えるワイルドカードは * と ? だけです。他の正規表現は使えません。複数のファイルを指定する場合は、空白で区切って列挙します。

指定したファイル名やパターンにマッチするファイルのみが更新処理の対象となります。ファイル指定をすることは、逆に言うと、「それ以外のファイル名は除外する」ことを意味しています。

通常は<ファイル> を指定しない場合が多いと思いますが、その場合は、*.* が指定されたとみなされ、全てのファイルが処理対象となり、除外されるファイルはありません。

ファイル指定例

robocopy D:\src E:\dest *.txt *.doc /MIR /DCOPY:DAT     フォルダ配下の拡張子がtxtとdocのファイルのみコピーする

robocopy D:\src E:\dest index.html /MIR /DCOPY:DAT     フォルダ配下にある index.htmlのみコピーする 

 

ファイル指定をした場合の robocopy /MIR の動作を以下の表に示します。ファイル指定されたファイル以外については「除外」され、何も処理は行われません。従って、古いファイルが残っていても、更新や削除は行われず残ったままとなります。ファイル指定されなかったファイルはコピー先から削除されるわけではないので注意してください。

ファイル指定時の /MIR の動作
ファイル指定 コピー元 コピー先 実行動作
指定されたファイル 存在する 存在する 更新されていればコピーする
存在する 存在しない コピーする
存在しない 存在する コピー先ファイルを削除する
それ以外のファイル 何もしない

具体例で示すと、以下のようになります。

*.txt にマッチするファイルは /MIR の基本動作通りにコピーされますが、マッチしないその他のファイルは、何も処理されないため、コピー先に現在のファイルのまま残ります。そのため、コピー先=コピー元ではなくなります。

 

除外指定と /MIR の動作

除外指定には、いくつもの種類の除外オプションがあります。

  • /XF 除外ファイル指定
  • /XF 除外フォルダ指定
  • /XA 除外属性指定
  • /XC 変更された(Changed)ファイルを除外します。
  • /XN 新しい(Newer)ファイルを除外します。
  • /XO 古い(Older)ファイルを除外します。
  • /XX コピー先にだけ存在するファイルとディレクトリ(eXtra)を除外します。
  • /XL コピー元にだけ存在するファイルとディレクトリ(Lonely)を除外します。

 

例えば、除外ファイル指定は以下のように指定します。ファイル名指定方法はファイル指定と全く同じです。

robocopy D:\src E:\dest /MIR /DCOPY:DAT /XF temp.txt *.tmp      (temp.txt と *.tmp を除外する)

除外フォルダの指定例は以下のようになります。

robocopy D:\src E:\dest /MIR /DCOPY:DAT /XD "System Volume Information"    (フォルダ "System Volume Information" を除外する)

 

ファイル指定・除外指定をした場合の robocopy /MIR の動作を以下の表に整理します。ファイル指定同様、除外されたファイルについては何も処理は行われません。除外されたファイルは、コピー先に存在していても、削除されず残り続けますので注意してください。

ファイル指定、除外指定時の /MIR の動作
ファイル指定 除外指定 コピー元 コピー先 実行動作
指定されたファイル 除外指定されていないファイル 存在する 存在する 更新されていればコピーする
存在する 存在しない コピーする
存在しない 存在する コピー先ファイルを削除する
除外指定されたファイル 何もしない
それ以外のファイル 何もしない

考え方としては、「1つでも除外条件に当てはまるファイルについては何も処理が行われない」と覚えておくのが良いと思います。ファイル指定されていても、除外指定されているファイルについては、何も処理が行われませんので、注意してください。

 

具体例です。

robocopy D:\src E:\dest *.txt /MIR /DCOPY:DAT /XF temp.*

というコマンドの動作例は以下のようになります。

 

/XF, /XD 以外の除外オプションでも上記の動作は同じになります。

 

除外したファイルを全て削除してしまいたいという場合は、一度コピー先フォルダを全部削除してから、再度コピーするしかなさそうです。

 

まとめ

/MIR はフォルダを同期させるのにとても便利なオプションで、私は、常々、robocopy は /MIR /DCOPY:DAT だけ使っていれば事足りるのではないかと思っているくらいです。必要なファイルだけをコピーまたは削除し、短時間で、フォルダを同期し同一にさせることができるため、とても便利です。

ただ、いろいろなオプションを付け、ファイル指定、除外指定した場合、完全な同期でなくなってしまう可能性があるので、ご注意ください。

 



【関連記事・関連コンテンツ】

 

コメントをお送りください
お名前:
コメント:
コメントの公開: