2010-02-27 11:13:48 +0000 2010-02-27 11:13:48 +0000
90
90

最終更新時刻を変更せずにUnixでファイルをコピーするには?

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

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

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

回答 (4)

106
106
106
2010-02-27 11:20:21 +0000

cp -pでうまくいきます。Linuxの場合](http://www.unix.com/man-page/Linux/1/cp/).

-p --preserve=mode,ownership,timestamps と同じ FreeBSDの場合 .

-p cp がコピー内の各ソースファイルの以下の属性を保持するようにします: 変更時間、アクセス時間、ファイルフラグ、ファイルモード、ACL、ユーザ ID、グループ ID。

OS X の場合

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

ls -luで示されるように、ソースファイルの**アクセス時間(atime)が変更される可能性があることに注意してください。また、statstat -xを使用することで、データアクセス、データ変更、ファイルの状態変化の時間をきれいに表示することができます[macOSの場合は、明示的な書式設定で誕生時間を追加することができます]。

stat -f "%n%N%nAccess (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth (Btime): %SB%n" *
16
16
16
2015-06-09 15:45:17 +0000

GNU Coreutils](http://www.gnu.org/software/coreutils/manual/coreutils.html#cp-invocation)の`cp`を使用する場合、タイムスタンプのみを保存し、ユーザIDやグループID、ファイルモードなどの属性を保存しないようにするために、保存する属性のリストを明示的に指定できるロングハンドの`–preserve`があります。

cp --preserve=timestamps source destination

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

11
11
11
2010-02-27 11:23:37 +0000

Unixファイルシステムには、アクセス時間(atime)、変更時間(mtime)、inode変更時間(ctime)の3つの時間があります。アクセス時間と変更時間はタッチプログラムで変更することができ、例えば

cp orig copy touch -r orig copy

などです。

0
0
0
2013-07-21 16:57:14 +0000

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

関連する質問

10
37
7
14
6