4,501 views
この記事は最終更新から 1178日 が経過しています。
1. やりたいこと
Linuxネタではないのだが、備忘録を書いておくところが無いので本ブログに書いておく。
Windowsパソコンに積んだ大容量 HDDの中に、子供の写真やら動画やらを置いている。
どれも消えてしまっては悲しい大切なデータなので、ちょくちょく USB接続のポータブル HDDにバックアップ している。
「〇月〇日の分までは前回バックアップしたから、今日は…」
なんてコピーすべきファイルを探していたのが今までのやり方。
今日からは、差分だけを探してコピーしてくれる robocopy なる便利な DOSコマンドを使う。
これの使い方について備忘録を書いておく。
2. やってみる
1) 基本的な使い方
「C:\MyData」から「E:\MyData」に差分をコピーする。DOSプロンプト画面で以下のように入力する。
robocopy C:\MyData D:\MyData /s /e /z
/s : サブディレクトリもコピーする。
/e : 空っぽのディレクトリもコピーする。
/z : もしコピーが失敗した場合、後でそこからコピーを再開する。
【注意】
・コピー先に同名のファイルが存在した場合、コピー先の方が新しくても上書きされてしまう。
・コピー元に存在せず、コピー先に存在するディレクトリやファイルは、削除されない。
これは /purge オプションで削除するようにもできる。
2) 問答無用でコピー元と同じにしたい場合
コピー先に完全なクローンを作りたい場合は /mir オプションを使う。
robocopy C:\MyData D:\MyData /mir /z
/mir : 問答無用でミラーを作成する。
【注意】
・コピー元に存在せず、コピー先に存在するディレクトリやファイルは、削除される。
3) 指定したディレクトリをコピー対象外にしたい場合
コピー対象外にしたいディレクトリは /xd オプションで指定する。
以下の例の場合、ABC という名前のディレクトリはスキップされる。
robocopy C:\MyData D:\MyData /s /e /z /xd "ABC"
除外したいディレクトリは複数指定が可能だ。
robocopy C:\MyData D:\MyData /s /e /z /xd "ABC" "AIU"
3. おまけ
他のオプションについて調べたいときのために robocopy コマンドのヘルプを転載しておく。
------------------------------------------------------------------------------- ROBOCOPY :: Windows の堅牢性の高いファイル コピー ------------------------------------------------------------------------------- 開始: 2018年11月13日 23:17:16 使用法:: 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 は要求された操作をシステム ボリューム情報ディレクトリ内のファイル にも適用していました。この動作は変更されました。 どちらかを指定すると、robocopy はその名前を持つファイルまたはディレクトリを (コピー セッションの最上位レベルのソースと宛先ディレクトリで) スキップします。
4. 所感
・これで Windows環境でのバックアップがだいぶ楽になるなぁ。