バックアップと同期 (Windows)

Windows では C:\WINDOWS\System32\Robocopy.exe を使う

Robocopyはコピー元、コピー先ともにドライブもしくはディレクトリを指定する。

> robocopy /?
-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー                              
-------------------------------------------------------------------------------

  開始: 20YY年MM月DD日 H:I:S
              使用法:: ROBOCOPY コピー元 コピー先 [ファイル [ファイル]...] [オプション]

           コピー元 :: コピー元ディレクトリ (ドライブ:\パスまたは \\サーバー\共有\パス)。
           コピー先 :: コピー先ディレクトリ (ドライブ:\パスまたは \\サーバー\共有\パス)。
           ファイル :: コピーするファイル (名前/ワイルドカード: 既定値は「*.*」です)

::
:: コピー オプション:
::
                 /S :: サブディレクトリをコピーしますが、空のディレクトリはコピーしません。
                 /E :: 空のディレクトリを含むサブディレクトリをコピーします。
             /LEV:n :: コピー元ディレクトリ ツリーの上位 n レベルのみをコピーします。

                 /Z :: 再起動可能モードでファイルをコピーします。
                 /B :: バックアップ モードでファイルをコピーします。
                /ZB :: 再起動可能モードを使用します。アクセスが拒否された場合、バックアップ モードを使用します。
                 /J :: バッファーなし I/O を使用してコピーします (大きなファイルで推奨)。
            /EFSRAW :: 暗号化されたすべてのファイルを EFS RAW モードでコピーします。

 /COPY:コピーフラグ :: ファイルにコピーする情報 (既定値は /COPY:DAT)。
                       (コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。
                       (S= セキュリティ =NTFS ACL、O= 所有者情報、U= 監査情報)。

 
               /SEC :: セキュリティと共にファイルをコピーします (/COPY:DATS と同等)。
           /COPYALL :: ファイル情報をすべてコピーします (/COPY:DATSOU と同等)。
            /NOCOPY :: ファイル情報をコピーしません (/PURGE と共に使用すると便利)。
            /SECFIX :: スキップしたファイルも含むすべてのファイルのファイル セキュリティを修正します。
            /TIMFIX :: スキップしたファイルも含むすべてのファイルのファイル時刻を修正します。

             /PURGE :: 既にコピー元に存在しないコピー先のファイル/ディレクトリを削除します。
               /MIR :: ディレクトリ ツリーをミラー化します (/E および /PURGE と同等)。

               /MOV :: ファイルを移動します (コピー後にコピー元から削除)。
              /MOVE :: ファイルとディレクトリを移動します (コピー後にコピー元から削除)。

     /A+:[RASHCNET] :: コピーされたファイルに指定の属性を追加します。
     /A-:[RASHCNET] :: コピーされたファイルから指定の属性を削除します。

            /CREATE :: ディレクトリ ツリーと長さ 0 のファイルのみを作成します。
               /FAT :: 8.3 FAT ファイル名のみを使用してコピー先ファイルを作成します。
               /256 :: 256 文字を超える非常に長いパスのサポートをオフにします。

             /MON:n :: コピー元を監視し、n 回を超える変更があった場合に再度実行します。
             /MOT:m :: コピー元を監視し、m 分後に変更があった場合に再度実行します。

      /RH:hhmm-hhmm :: 実行時間 - 新しいコピーを開始できる時刻です。
                /PF :: 実行時間をファイルごと (パスごとではない) に確認します。

             /IPG:n :: 低速回線で帯域幅を解放するためのパケット間ギャップ (ミリ秒)。

                /SL :: 対象ではなくシンボリック リンクをコピーします。

            /MT[:n] :: n 個のスレッドのマルチスレッド コピーを実行します(既定値 8)。
                       n は 1 から 128 までの値である必要があります。
                       このオプションは、/IPG および /EFSRAW オプションと互換性がありません。
                       パフォーマンスの向上のため、/LOG オプションを使用して出力をリダイレクトします。

/DCOPY:コピーフラグ :: ディレクトリにコピーする情報 (既定値は /DCOPY:DA)。
                       (コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。

           /NODCOPY :: ディレクトリ情報をコピーしません (既定では /DCOPY:DA が実行されます)。

         /NOOFFLOAD :: Windows のオフロードをコピーするメカニズムを使用せずに、ファイルをコピーします。

::
:: ファイル選択オプション:
::
                 /A :: アーカイブ属性が設定されているファイルのみをコピーします。
                 /M :: アーカイブ属性のあるファイルのみをコピーし、リセットします。
    /IA:[RASHCNETO] :: 指定されたいずれかの属性が設定されているファイルのみを含みます。
    /XA:[RASHCNETO] :: 指定されたいずれかの属性が設定されているファイルを除外します。

/XF file [ファイル]... :: 
                       指定された名前/パス/ワイルドカードに一致するファイルを除外します。
/XD dir [ディレクトリ]... :: 
                       指定された名前/パスに一致するディレクトリを除外します。

                /XC :: 変更されたファイルを除外します。
                /XN :: 新しいファイルを除外します。
                /XO :: 古いファイルを除外します。
                /XX :: コピー先にだけ存在するファイルとディレクトリを除外します。
                /XL :: コピー元にだけ存在するファイルとディレクトリを除外します。
                /IS :: 同一ファイルを含みます。
                /IT :: 異常なファイルを含めます。

             /MAX:n :: 最大ファイル サイズ - n バイトより大きいファイルを除外します。
             /MIN:n :: 最小ファイル サイズ - n バイトより小さいファイルを除外します。

          /MAXAGE:n :: 最長ファイル有効期間 - n 日より古いファイルを除外します。
          /MINAGE:n :: 最短ファイル有効期間 - n 日より新しいファイルを除外します。
          /MAXLAD:n :: 最大最終アクセス日 - n で指定する値以後に使用していないファイルを除外します。
          /MINLAD:n :: 最小最終アクセス日 - n で指定する値以後に使用されたファイルを除外します。
                       (n < 1900 の場合、n = n 日です。それ以外は、n = YYYYMMDDの日付です)。

                /XJ :: 接合ポイントを除外します (通常、既定で含まれます)。

               /FFT :: FAT ファイル時間 (2 秒の粒度) を仮定します。
               /DST :: 1 時間の DST 時間差を補正します。

               /XJD :: ディレクトリの接合ポイントを除外します。
               /XJF :: ファイルの接合ポイントを除外します。

::
:: 再試行オプション:
::
               /R:n :: 失敗したコピーに対する再試行数: 既定値は 1,000,000。
               /W:n :: 再試行と再試行の間の待機時間: 既定値は、30 秒です。

               /REG :: /既定の設定としてレジストリに R:n と /W:n を保存します。

               /TBD :: 共有名が定義されるのを待ちます (再試行エラー 67)。

::
:: ログ オプション:
::
                 /L :: リストのみ - いずれのファイルにも、コピー、タイムスタンプの追加、または削除を実施しません。
                 /X :: 選択されたファイルのみではなく、余分なファイルをすべて報告します。
                 /V :: スキップされたファイルを示す詳細出力を作成します。
                /TS :: 出力にコピー元ファイルのタイム スタンプを含めます。
                /FP :: 出力にファイルの完全なパス名を含めます。
             /BYTES :: サイズをバイトで出力します。

                /NS :: サイズなし - ファイル サイズをログに記録しません。
                /NC :: クラスなし - ファイル クラスをログに記録しません。
               /NFL :: ファイル リストなし - ファイル名をログに記録しません。
               /NDL :: ディレクトリなし - ディレクトリ名をログに記録しません。

                /NP :: 進行状況なし - コピーの完了率を表示しません。
               /ETA :: コピーするファイルの推定完了時刻を表示します。

      /LOG:ファイル :: ログ ファイルに状態を出力します (既存のログを上書きします)。
     /LOG+:ファイル :: ログ ファイルに状態を出力します (既存のログ ファイルに追加します)。

   /UNILOG:ファイル :: ログ ファイルに UNICODE で状態を出力します (既存のログを上書きします)。
  /UNILOG+:ファイル :: ログ ファイルに UNICODE で状態を出力します (既存のログに追加します)。

               /TEE :: コンソール ウィンドウとログ ファイルに出力します。

               /NJH :: ジョブ ヘッダーがありません。
               /NJS :: ジョブ要約がありません。

           /UNICODE :: 状態を UNICODE で出力します。

::
:: ジョブ オプション:
::
      /JOB:ジョブ名 :: 名前の付いたジョブ ファイルからパラメーターを取得します。
     /SAVE:ジョブ名 :: 名前の付いたジョブ ファイルにパラメーターを保存します。
              /QUIT :: コマンド ラインの処理後に終了します (パラメーターの表示のため)。 
              /NOSD :: コピー元ディレクトリを指定しません。
              /NODD :: コピー先ディレクトリを指定しません。
                /IF :: 後続のファイルを含みます。

::
:: 注釈 :
::
       ボリュームのルート ディレクトリで /PURGE または /MIR を使用すると、robocopy は、要求した操作を System Volume Information 内のファイルにも適用します。
       この動作が意図したものでない場合は、/XD スイッチを使用して、そのディレクトリをスキップするように robocopy に指示することができます。

【A】単純に全てのファイル、ディレクトリをバックアップする。

>> robocopy <コピー元> <コピー先>  /E /R:0 /W:0 /XO /XJ /XD "$RECYCLE.BIN" /XD "System Volume Information"

オプションの意味は・・・ディレクトリ内を再帰的にたどってコピーし(/E)、コピー元読み取りエラー場合の再試行はしない(/R:0)、書き込みエラー時の再試行までの待機時間はゼロ(直ちに再試行)(/W:0)。コピー先より古いファイルはコピーしないし(/XO)、ジャンクションポイント(Linux等でいうところのシンボリックリンクのようなもの)は辿らない(/XJ)。また、ゴミ箱フォルダやコピーできないフォルダはコピー対象から外す(/XD)。

※空ディレクトリをコピーさせない場合は、/E のかわりに /S を指定する。
※もしコピー対象のファイルが動画ファイルなどサイズが大きい場合は、効率が悪くなるので /J を指定してバッファI/O を使用しないようにする。

【B】特定のファイルのみバックアップする。

>> robocopy <コピー元> <コピー先>  *.jpg *.png *.mp4 /E /R:0 /W:0 /XO /XJ /XD "$RECYCLE.BIN" /XD "System Volume Information"

上記【A】とほぼ同じだけど、コピー先指定の後に、対象のファイルを指定する。通常はワイルドカードを使って。複数指定可。

【C】ディレクトリ同期(ミラーリング)

>> robocopy <同期元> <同期先> /MIR /R:0 /W:0 /XD "$RECYCLE.BIN" /XD "System Volume Information"

robocopyはデフォルトでタイムスタンプが違うかサイズが違うと上書きしてしまう。このため、同期元と同期先を完全に一緒にしたい場合はこれでいいのですが、同期先に新しいファイルがある場合ファイルコピーをしたくない場合は、/XO を指定しなければなりません。

【D】ディレクトリ構造のみコピー

>> robocopy <コピー元> <コピー先> /E /DCOPY:T /XF *

単純にディレクトリのタイムスタンプ(/DCOPY:T)とともに再帰コピー(/E)しつつ、すべてのファイルを除外(/XF *)。