web-dev-qa-db-ja.com

最後の変更時刻を変更せずにファイルをunixにコピーする方法

cpを使用してある場所から別の場所にファイルをコピーした場合、コピーしたファイルのタイムスタンプはコピーした時刻に設定されます。

これを回避する方法はありますか?

タイムスタンプを変更せずにファイルをコピーする必要があります。

86
Lazer

cp -pがうまくいきます。 Linuxの場合

-p--preserve=mode,ownership,timestampsと同じ

FreeBSDの場合

-pコピー内の各ソースファイルの次の属性を変更します。アクセス許可で許可されている場合は、変更時刻、アクセス時刻、ファイルフラグ、ファイルモード、ACL、ユーザーID、グループID.

そしてOS Xの:

-pパーミッションで許可されているように、コピー内の各ソースファイルの次の属性を変更時間、アクセス時間、ファイルフラグ、ファイルモード、ユーザーID、およびグループIDとして保持します。リソースフォークを含むアクセス制御リスト(ACL)と拡張属性(EA)も保持されます。

99
Arjan

GNU Coreutils からcpを使用する場合、ユーザーID、グループID、ファイルモードなどの属性ではなくタイムスタンプのみを保持するために、明示的に--preserve保存する属性のリストを指定します。

cp --preserve=timestamps source destination

ただし、この構文は他のUnicesではおそらくサポートされないことに注意してください。別の方法として、rsync--timesパラメーターを使用する方法があります。これは、ほとんどのインストールで使用可能です。

15
Stefan Schmidt

Unixファイルシステムには、アクセス時間(atime)、変更時間(mtime)、およびiノード変更時間(ctime)の3つの時間があります。タッチプログラムを使ってアクセス時間と修正時間を変更することができます。

 cp元のコピー
 touch -r元のコピー

ただし、iノード変更時刻を変更することはできません。

11
gorilla

私は最近似たようなことをする必要がありましたが、代わりにシンボリックリンクを使用しました。シンボリックリンクを作成して元のタイムスタンプを保持するには、次のようにします。cp -ps src_file dst_symlink

0
fduff