Windowsのrobocopyコマンドでコピーするファイルの種類を選択/変更するTech TIPS

robocopyはファイルのバックアップやシステム構成情報などのコピー、システム間での複製などで利用できるコピー・ツールである。自動的なリトライや中断時の再実行、ログ記録、ジョブ機能など、さまざまな機能を持ち、バッチ・ファイルなどと組み合わせてよく利用される。robocopyでコピー対象のファイルを限定したり、不要なファイルをコピー対象から除外するさまざまなオプションを紹介。

» 2013年09月27日 17時23分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows XP/Windows Vista/Windows 7/Windows 8/Windows Server 2003/Windows Server 2008/Windows Server 2008 R2/Windows Server 2012



解説

 TIPS「Windowsのrobocopyコマンドでフォルダをバックアップ/同期させる」では、robocopyというコマンドを使ってファイルをコピー/バックアップする基本的な方法を紹介した。robocopyは、ファイルやフォルダのコピー/バックアップ/同期などに対応した多機能なコマンドで、xcopyコマンドではできないようなさまざまなコピー・オプションを持っている。

 robocopyのデフォルト設定では、ファイルの更新時刻やサイズに基づいてコピーするかしないかを決定しているが、オプションを指定することにより、ファイルの属性などに基づいて選択的にコピーさせることができる。本TIPSでは、そのためのオプションを紹介する。

 なおWindows XP/Windows Server 2003の場合、robocopyは付属していないのでリソースキットを入手してインストールする必要がある。入手方法についてはTIPS「Windows OS向けリソースキット・ツールを入手する」を参照していただきたい(ただしリソースキット版のrobocopyでは、本TIPSで紹介するオプションがすべて使えるわけではない)。

操作方法

●ファイルの「クラス」に基づいてコピー対象を選択/変更する

 robocopyのオプションの説明の前に、robocopyで扱うファイル(やフォルダ)の「クラス」について説明しておく。クラスとは、転送元と転送先のファイルの状態や属性情報などを比較して、2つのファイルがどのような関係にあるかを判断する基準のことである。robocopyには次のような8つのクラスがある。

クラス コピー元 コピー先 更新時刻 サイズ 属性
Lonely ある ない
Tweaked ある ある 一致 一致 不一致
Same ある ある 一致 一致 一致
Changed ある ある 一致 不一致
Newer ある ある 元>先
Older ある ある 元<先
Extra ない ある
Mismatched ある ある
robocopyのファイル・クラス
「ある」「ない」は、ファイルが存在するかどうか、「一致」「不一致」は更新時刻やサイズが同じかどうか、「元>先」はコピー元ファイルの方が新しい、「元<先」はコピー先ファイルの方が新しい、という意味。例えば「Lonely」はコピー元にしかないファイル、「Extra」はコピー先にしかないファイル、「Tweaked」はサイズも更新時刻も同じだが、属性情報が異なるファイル。「Mismatched」は、ファイルとフォルダのように、名前は同じだが種類が違う場合のクラス。

 デフォルトでは、robocopyは「Changed」「Newer」「Older」となっているファイルだけをコピーするようになっている。つまり、内容が変更されているか、コピー元の方が新しいか、逆にコピー元の方が古い(コピー先の方が新しい)ファイルだけをコピーする。

 この挙動を変更するには、robocopyに次のオプション・スイッチを付加する。

オプション 動作
/xc Changed(変更されたファイル)を除外する
/xn Newer(新しいファイル)を除外する
/xo Older(古いファイル)を除外する
/xx Extra(コピー先にしかないファイル)を無視する(処理しない)
/xl Lonely(コピー元にしかないファイルやフォルダ)を除外する
/is Same(同一のファイル)もコピーする
/it Tweaked(日付やサイズが同一だが属性が一部異なるファイル)もコピーする。ただしこのオプションを付けない場合は、SameとTweakedは区別されず、TweakなファイルはSameと同じ扱いになる。このオプションがある場合にのみTweakなクラスが識別され、コピー対象となる
コピーするクラスの変更オプション

■古いファイルをコピーさせない
 xcopyの「/d」オプションでは、コピー元の方が古いファイルはコピーしないが、robocopyはデフォルトではこのようなファイルでもコピーする。これを変更してxcopyのようにするには「/xo」オプションを付ける。

■強制的に上書き更新する
 「/is」オプションを付けると同じファイルでもコピーされるので、全ファイルを強制的に上書き更新できる。

■存在するファイルのみを更新する
 「/xl」オプションを付けると、コピー先にすでにファイルが存在する場合にのみ上書き更新できる。なので、例えばコピー元にある一時的なファイルや、あらかじめコピー先に用意していないようなファイル(つまり、コピーさせたくないファイル)を間違って送ってしまうことがなくなる。

●時間計算における許容範囲の指定

 FATファイル・システムでは、ファイルの作成や更新時刻などは2秒の精度でしか記録できない。そのため、ほかのファイル・システムとの間でファイルをコピーさせると、更新時刻が一致しないという問題が発生することがある(例えば「1時2分3秒」という時刻情報を持つファイルをFATへコピーすると「1時2分2秒」になってしまい、Sameクラスにならない)。これらを防ぐため、2秒以内の誤差や夏時間の1時間の時差を無視するオプションも用意されている。

オプション 動作
/fft 2秒以内の誤差なら、時刻情報は一致していると見なす
/dst 1時間以内の誤差なら、時刻情報は一致していると見なす。これは夏時間制を使っている地域のためのオプション
時間計算における許容範囲の指定

●特定のファイルやフォルダをコピー対象から除外する

 名前やワイルドカード指定を使って、コピー対象から除外させるには、「/xf 名前」や「/xd 名前」オプションを使う。前者は特定のファイルの除外、特定のフォルダの除外をそれぞれ表す。

●ファイルの属性に基づいてコピー対象を選択/変更する

 コピー元のファイルの属性情報に基づいてコピー対象を選択するには、「/ia:属性」か「/xa:属性」オプションを使用する。前者は指定した属性を含むもの、後者は指定した属性を含まないものがマッチする。「属性」には次の文字を組み合わせて指定する。複数組み合わせた場合は、1つでも属性が含まれていればマッチする。

属性名 意味
R 読み取りのみ属性
A アーカイブ属性
S システム属性
H 隠し属性
C 圧縮属性
N インデックス抑止属性
E 暗号化属性
T 一時ファイル属性
O オフライン属性
コピーするファイルの属性
これらの属性を持つファイルをコピーさせたり、コピーから除外させたりする。属性は複数組み合わせ可能。「N」はインデックス対象から除外するという属性。TIPS「エクスプローラにおけるファイルのN属性とは?」参照

 例えば「/xa:sh」オプションを指定すると、システム属性か隠し属性を持つファイルがコピー対象から除外される。「/ia:〜」と「/xa:〜」の両方を指定すると、先に「/ia:〜」が処理され、その後「/xa:〜」で除外する属性が決定される。

●アーカイブ属性を持つファイルをコピーする

 アーカイブ属性とは、ファイルに何かデータを書き込んだときに自動的にセットされる特別な属性情報であり、通常はバックアップ・プログラムが利用する。ユーザーやアプリケーションがファイルにデータを書き込むとアーカイブ属性がセットされるので、バックアップ・プログラムはこの属性がセットされているファイルのみを選択してバックアップする。そしてバックアップ後にアーカイブ属性をクリアするとバックアップ済みということになり、次回のバックアップからは除外される。差分バックアップで使うための属性である。

 robocopyで「/a」オプションを付けると、アーカイブ属性を持ったファイルだけがコピーされるが、アーカイブ属性はセットされたままになる。「/a」ではなく「/am」を付けると、、アーカイブ属性を持ったファイルをコピー後、アーカイブ属性をクリアするので、次回からはコピーされなくなる。

●ジャンクションをコピー対象から除外する

 robocopyはデフォルトでは「ジャンクション(ファイルやフォルダへのリンク)」を通常のフォルダとしてコピーしようとするが、場合によっては無限にコピーが行われることになる。これを避けるためには、ジャンクションをコピー対象から除外するオプションを指定する。このオプションは必ず付けるようにした方がいいだろう。

オプション 意味
/xj ジャンクションを除外する
/xjd フォルダへのジャンクションを除外する
/xjf システム属性
ジャンクションの除外指定オプション

●特定のサイズや更新日時のファイルをコピー対象から除外する

 コピーするファイルのサイズや更新時間(何日アクセスしていないか、など)に基づいて、コピーから除外させるには次のオプションを使う。

オプション 意味
/max:サイズ 指定したサイズよりも大きいファイルは除外
/min:サイズ 指定したサイズよりも小さいファイルは除外
/maxage:日付 指定した日付よりも古いファイルは除外
/minage:日付 指定した日付よりも新しいファイルは除外
/maxlad:日付 最終アクセス日付(Last Access Date:LAD)が指定した日付よりも古いファイル(x日以上使っていないファイル)は除外
/minlad:日付 最終アクセス日付(Last Access Date:LAD)が指定した日付よりも新しいファイル(x日以内に使用したファイル)は除外
サイズや日付による除外オプション

 「サイズ」にはファイルのサイズをbytes単位で記述する。「日付」には、1900までの数値か(これは日数と見なされる)、「YYYYMMDD」形式の西暦の年月日を指定する。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。