Windowsでファイルをコピーするときにファイルの属性を保存する方法は?
Linuxでは、
cp -pr directory
と単純にできますが、Windowsではどうすればいいのでしょうか?Windowsのエクスプローラで実行できますか?何かGUIツールの提案はありますか?
NTFSのパーミッションと作成/変更/アクセス時間を保てれば最高なんですが。最低限、ファイルとディレクトリの修正日を保持する必要があります。Windowsエクスプローラのコピーでは、ディレクトリの更新日を保存しません。
Linuxでは、
cp -pr directory
と単純にできますが、Windowsではどうすればいいのでしょうか?Windowsのエクスプローラで実行できますか?何かGUIツールの提案はありますか?
NTFSのパーミッションと作成/変更/アクセス時間を保てれば最高なんですが。最低限、ファイルとディレクトリの修正日を保持する必要があります。Windowsエクスプローラのコピーでは、ディレクトリの更新日を保存しません。
ロボコピーコマンドラインツール(ほとんどのバージョンのwindowsに付属)
私のwindows10のマシンではC:\Windows\System32
Wikipediaによると、ファイルとディレクトリのタイムスタンプやその他の属性を保存するために、以下のオプションセットで使用することができます。
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPYALL /E /R:0
/DCOPY:T オリジナルの ディレクトリのタイムスタンプを保存 (バージョンXP026以降が必要) /E. /R:0: 空のディレクトリを含むディレクトリを再帰的にコピー /COPYALL: ロックされたファイルを再試行しない(コピー失敗時の再試行回数のデフォルト値は100万回)
/COPY:DATSOU: すべてのファイル情報をコピー
Robocopy C:\some_directory D:\some_directory /DCOPY:T /COPY:T /S.
/S: すべてのファイル情報をコピーする,
(robocopy /?と同等。
日付とディレクトリのタイムスタンプを保存したいだけで、空のサブディレクトリをコピーしたくない、他の属性を保存したくない場合は、以下のようにしてください。
Robocopy D:\ C:\D_backup /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIR
ここで、/XD は 空ではないサブディレクトリをコピーする
完全な構文を見るには、コマンドプロンプトで /L と入力するか、以下のブログ記事を参照してください。 https://ss64.com/nt/robocopy.html an https://techjourney.net/robocopy-syntax-command-line-switches-and-examples/
最近実行したコマンドの例。
show hidden files
2つのサブディレクトリを除外するには、show system files フラグを2回使用する必要があることに注目してください。また、2つ目のディレクトリの除外では、ディレクトリ名にスペースがあるため、引用符を使用しています。
最後に、実際にコマンドを実行する前に /A-:SH フラグを追加してテストすることができます。これにより、必要のないディレクトリやファイルがコピーされない(または削除されない)こと、コマンドにエラーがないことを確認することができます。
上記の例のコマンドを実行すると、ディレクトリが表示されませんでした。(Windows10ではRobocopy D:\ C:\D_backup /A-:SH /DCOPY:T /COPYALL /E /R:0 /ZB /ETA /TEE /V /FP /XD D:\$RECYCLE.BIN /XD "D:\System Volume Information" /LOG:C:\D_backup_robocopy.LOG /MIRと0x6&がチェックされていたのに!) https://serverfault.com/a/455029/399723 の通りに以下のコマンドを実行すると直りました。
attrib -h -s C:\D_backup
また、 https://serverfault.com/a/565804/399723 のように、0x6&を追加することで「システムファイルから隠し属性を解除する」ことで、そもそもディレクトリが非表示になるのを防ぐことができます。https://ss64.com/nt/robocopy.html ](https://ss64.com/nt/robocopy.html)も参照してください。
この descussion は、解決策としてのこのオプションについてより多くの光を与えています。
0x6&
コマンドラインを使いたくない場合は、 GUI版の robocopy をダウンロードすることもできます。
もう一つのWindowsユーティリティは XCopy です。ゲットチャについてはリンク先を参照してください。
ロボコピーのウィキペディアのページ(この記事のトップにリンクされています)には、他にも使えるソフトがリストアップされています。
Windowsでこれを行う簡単な方法はありません。
以下はそのトリックを実行してくれそうなプログラムです http://forum.soft32.com/windows/preserve-creation-date-Copy-ftopict361820.html (リンクが壊れています。)
Windowsのエクスプローラだけでは無理です。
File times semantics
この記事では、ファイルの作成/変更/アクセス時間に関するセマンティクスを文書化する必要があります。
作成時刻: 対象のファイルが既に存在する場合、そのファイルの作成時刻は***保存されます。
最終更新時刻: ソースファイルの更新時刻から常にコピーされる。
最終アクセス時刻: 常に現在のシステム時刻に設定される。
Synchronize It! (http://www.grigsoft.com/wndsync.htm)3.5は、すべてのタイムスタンプ(ファイルとフォルダ、変更と作成)を保持します。私が知っているWindows XP上では、Robocopy以外にはこのソフトが唯一完璧にタイムスタンプを保持してくれるソフトであり、私は色々と試してみました。ただし、FlashGet や Orbit Downloader のようなソフトウェアを使ってダウンロードしたソースファイルでは、破損したファイルが生成されることがあるので注意が必要です(結果として生成されるファイルのサイズは同じですが、実際にコピーされるのは 25kB だけで、残りはゼロで埋められています)。このようなソフトウェアが(速度を最適化するための)小さなパケットでファイルをダウンロードしていることと、私のデータパーティションが非常に断片化されていることが関係しているのだと思います。
Robocopy XP026は確かにWindows Vistaに含まれていますが、Windows XPでは動作します。Robocopy XP026」で検索してみてください。あるいは、Robocopy GUIをインストールして、System32フォルダの中にあるrobocopy.exeファイルを検索して、コマンドラインから使えるようにすることもできます。私が持っているファイルは208kBで、バージョン番号は5.1.2600.26です。
「バックアップモード」にバグがあるようですが、
ロボコピーのバージョンXP027ではどうやらこのバグはなくなったようですが、Windows XPでは動作しません。
ロボコピーはCOPYALLスイッチでできるはずです。GUI版は Microsoft Technet から入手できます。
私にとって今のところ一番シンプルな方法は、「send to」という方法です。これは外部アプリケーションを必要としません。私の経験では、元のファイルの属性をすべて保持します。
以前使っていた方法は、フォルダを圧縮・zipする方法でした。ただ、これはファイルをコピーするだけでなく、圧縮時も解凍時もファイルを処理して圧縮するので、確かに時間がかかります。
%appdata%\Microsoft\Windows\SendTo
とか。C:\Users\ _______ \AppData\Roaming\Microsoft\Windows\SendTo
コピーしたいファイルのあるフォルダにショートカットを追加して、コピーしたいファイルを右クリックするとsendtoメニューに項目が表示されます。
フォルダやディレクトリを移動しても、作成日を保持したまま移動するのは簡単です。Shiftキーを押しながらフォルダを新しい場所にドラッグするだけです(移動コマンド)。変更された日付は現在の日付になりますが、作成された日付は元の日付を保持します。
rsync -avu –modify-window=3602 sourcedirectory/ targetdirectory/
(これは、あるディレクトリから別のミラーへの同期ツールとして実際に使用されており、タイムウィンドウのオプションは、Windowsシステムがサマータイムなどのために時計を1時間動かした場合の問題を防ぐためです。
(linuxシステムと比較して)
Windows内のcygwin環境、またはwindowsドライブをマウントしたwindows内のlinux仮想マシン(例: virtualbox)
NB cygwinとvirtualboxはどちらも無料で、ある程度以上のlinux機能をwindows上で使用することができます - どちらも少し設定が必要です - 特にvirtualboxはそうですが、多くのメリットがあります….
私自身の問題は、ファイルは正しい時刻を持っているのにディレクトリは正しくないということでした。
このコマンドは、ファイルのタイムスタンプをコピーします。このコマンドは、フォルダ自体のタイムスタンプを正確に同じにするわけではないことに注意してください。また、コピー元 (Temp1) とコピー先 (Temp2) の両方に引用符を付けたことにも注意してください。これは、パスにスペースがある場合に行われます。私はスペースを入れていませんが、最悪の場合のために入れておくべきだと思いました。
robocopy /E /copy:DAT "C:\Temp1" "c:\Temp2"
フォルダのタイムスタンプを同じにするため。
robocopy /E /copy:DAT /dcopy:DAT “C:\Temp1” “c:\Temp2”
フォルダを移動して作成日時を保存する簡単な方法は、これらのユーティリティを使用します http://lantechsoft.com/data-copy.html
ファイルをコピーしている間に日付を保存することができるもう一つのもの。 http://technocomsolutions.com/data-copy-tool.html