Wie kopiere ich eine Datei in unix, ohne den Zeitpunkt der letzten Änderung zu ändern?

113611
Lazer

Wenn ich eine Datei von einem Ort an einen anderen cpkopiere, wird der Zeitstempel der kopierten Datei auf den Zeitpunkt der Kopie gesetzt.

Gibt es eine Möglichkeit, dies zu vermeiden?

Ich muss Dateien kopieren, ohne deren Zeitstempel zu ändern.

72

4 Antworten auf die Frage

84
Arjan

cp -p does the trick. For Linux:

-p same as --preserve=mode,ownership,timestamps

For FreeBSD:

-p Cause cp to preserve the following attributes of each source file in the copy: modification time, access time, file flags, file mode, ACL, user ID, and group ID, as allowed by permissions.

And for OS X:

-p Cause cp to preserve the following attributes of each source file in the copy: modification time, access time, file flags, file mode, user ID, and group ID, as allowed by permissions. Access Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also be preserved.

cp -a ist auch gut zu wissen, es impliziert nicht nur -p, sondern auch -R, um ganze Verzeichnisse zu kopieren, und -d, um Links zu erhalten. casualuser vor 14 Jahren 19
Beachten Sie jedoch, dass bei der Verwendung des GNU Coreutils `cp -p` nicht nur den Zeitstempel, sondern auch [Modus und Besitz] behält (http://www.gnu.org/software/coreutils/manual/coreutils.html#cp-invocation) ) und auf [FreeBSD] (https://www.freebsd.org/cgi/man.cgi?query=cp) neben der Änderungszeit werden auch »Zugriffszeit, Dateiflaggen, Dateimodus, ACL, Benutzer-ID und Gruppen-ID, wie durch Berechtigungen zulässig. «und unter [OS X] (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/cp.1.html) zusätzlich» Erweiterte Attribute , einschließlich Ressourcengabeln «. Stefan Schmidt vor 9 Jahren 2
Bei dem neuesten OSX berührt cp -p immer noch den Zeitstempel der Quelldatei afathman vor 7 Jahren 0
11
gorilla

There are three times on a Unix filesystem, the access time (atime), the modification time (mtime), and the inode change time (ctime). You can change the access time and the modification time with the touch program, for example

cp orig copy touch -r orig copy 

However, you cannot change the inode change time.

Informationen zur Inode-Änderungszeit finden Sie auch unter [linux - Zeitstempel für Erstellung oder Änderung festlegen - Stack Overflow] (http://stackoverflow.com/questions/4537291/setting-creation-or-change-timestamps). sdaau vor 11 Jahren 0
11
Stefan Schmidt

Bei der Verwendung cpvon GNU Coreutils, um nur die Zeitstempel und nicht Attribute wie Benutzer-ID, Gruppen-ID oder Dateimodus beizubehalten, gibt es die Langschreibweise --preserve, mit der explizit eine Liste von Attributen angegeben werden kann, die beibehalten werden sollen.

cp --preserve=timestamps source destination 

Beachten Sie jedoch, dass diese Syntax wahrscheinlich nicht von anderen Unices unterstützt wird. Eine Alternative könnte die Verwendung des --timesParameters rsyncsein, der bei den meisten Installationen verfügbar sein sollte.

Das ist die richtige Antwort. Die Verwendung von "-p" ist nicht die richtige Antwort. "-p" behält auch das Eigentum und den Modus. Was nicht erwünscht ist .. und wurde nicht in Frage gestellt. bshea vor 7 Jahren 3
0
fduff

Ich musste vor kurzem etwas ähnliches tun, aber stattdessen Symlink verwenden. So erstellen Sie einen Symlink und behalten den ursprünglichen Zeitstempel bei:cp -ps src_file dst_symlink

Als Kommentar kann dies für einige Leser nützlich sein. Als Antwort fügt es den meisten Lesern Rauschen hinzu. ndemou vor 5 Jahren 0