この質問と似ていますが、より難しい質問です:ファイル作成時間をまったく変更せずにファイルをコピーするにはどうすればよいですか?
「変更日」と「作成日」が乱れることなく、コンピュータ間でファイルをコピーしたいです。
目的は、diff
作業中に同期できた 3 台の異なるコンピューターのプロジェクト コードを比較することです。しかし、一度に作業していたのは 1 台のマシンだけだったので、どれが最も更新されていたか思い出せません。混乱しているので、コピーを 1 つにまとめ (できればバージョン管理下に置いて) たいと考えています。
そのため、ツールを使用するときにdiff
、ファイルの変更日を知っておくと、変更を理解してマージするのに役立ちます。
3 台のコンピュータのうち 2 台は Linux で、1 台は Windows 8 です。
上記を達成するための他の方法、このような状況でのベストプラクティスがあれば歓迎します。
答え1
Linux(および他のUnix系OS)では、フラッシュドライブまたはSMB/FTPサーバーとの間でファイルをコピーすることができます。
cp -p
そうすればタイムスタンプが保存されるはずです。
サーバーにアップロードするときにタイムスタンプが保持されるかどうかはわかりません。
答え2
通常、ファイル/フォルダには、作成、変更、アクセスの 3 つの属性があります。アクセス時間はそれほど重要ではありません。Linux では、作成時間は使用されません (標準の手順ではアクセスできません)。したがって、重要な属性は変更時間だけです。OS のツールでデータをコピーしても、変更時間は変更されません (少なくとも Linux の場合)。変更されない場合は、転送前にデータを圧縮し、もう一方の側で解凍することができます。通常、バックアップ ツールはすべての属性を保持します。
すべての属性を厳密に保持したい場合は、次の方法を使用できます。
cp
オプション-a
aka--archive
または --preserve=all を使用する
か、
rsync
または を使用します-t
。
これらのコマンドは、Linux ではデフォルトで使用できます (Windows 用にもダウンロードできます)。
コマンドライン ツールに興味がない場合は、属性コピーをサポートする同期ツールを使用してデータをコピーします。
答え3
コンピュータ上で最適なコードがどれかわからない場合は、3 つのソース ディレクトリすべてを 1 台のマシンにコピーし、ファイルごとにマージするのが最善だと思います。マージツール。
別の方法としては、マシン上にgitリポジトリを作成し、別のコンピュータからソースをコピーしてgitリポジトリファイルを上書きするか、新しいブランチに追加して、ギットのマージ。Windowsの場合は、Tortoise Git クライアント基本的なバージョン管理作業をすべて実行します。
メタデータのコピーについては、他の人の提案どおり、 を使用できますrsync -t
。FTPcp --preserve=all
転送の場合は、 を使用できますscp -p
。
答え4
2台のLinuxコンピュータ間では、rsync、タイムスタンプはそのまま保持されます。Windows
の場合は、ロボコピータイムスタンプを変更せずにファイルをコピーするには、Linux ボックスの FTP サーバーから Windows にファイルをコピーするために使用できる可能性があります。