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


89

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

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

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

回答:


103

cp -pトリックを行います。Linuxの場合

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

FreeBSDの場合

-p cpは、コピー内の各ソースファイルの次の属性を保持します。変更時間、アクセス時間、ファイルフラグ、ファイルモード、ACL、ユーザーID、およびグループID。アクセス許可で許可されています。

そしてOS Xのために

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


25
cp -aも知っておくと便利です。これは、-pだけでなく、ディレクトリ全体をコピーする-Rと、リンクを保持する-dも意味します。
casualuser

2
GNUのCoreutilsを使用するときにかかわらず、なお、cp -pタイムスタンプも保存していないだけのモードと所有権と上のFreeBSDを許可され、それはまた»アクセス時刻、ファイルフラグ、ファイルモード、ACL、ユーザーID、およびグループIDを保持する修正時刻のほかに許可によって。«およびOS Xでは、さらに»リソースフォークを含む拡張属性。
ステファンシュミット

最新のOSX上で、CPの-pは、まだソースファイルのタイムスタンプに触れる
afathman

15

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

cp --preserve=timestamps source destination

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


4
これは正解です。使用-pは正しい答えではありません。-p所有権とモードも保持します。これは望まれないかもしれません。そして、質問されませんでした。
bshea

10

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

cp orig copy
touch -r orig copy

ただし、iノードの変更時間は変更できません。


1
iノードの変更時間については、linux
-sdaau

0

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


コメントとして、これは少数の読者にとって有用である可能性があり、回答としてほとんどの読者にとってノイズを追加します。
ndemou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.