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

Wie kopiere ich eine Datei unter Unix, ohne ihre letzte Änderungszeit zu verändern?

Wenn ich eine Datei mit cp von einem Ort zu einem anderen kopiere, wird der Zeitstempel der kopierten Datei auf den Zeitpunkt der Kopie gesetzt.

Ist dies irgendwie zu vermeiden?

Ich muss Dateien kopieren, ohne ihre Zeitstempel zu verändern.

Antworten (4)

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

cp -p erfüllt den Zweck. Für Linux :

-p genauso wie --preserve=mode,ownership,timestamps Für FreeBSD :

-p Veranlassen Sie cp, die folgenden Attribute jeder Quelldatei in der Kopie beizubehalten: Änderungszeit, Zugriffszeit, Dateiflags, Dateimodus, ACL, Benutzer-ID und Gruppen-ID, wie von den Berechtigungen erlaubt.

Und für OS X :

-p Veranlassen Sie cp, die folgenden Attribute jeder Quelldatei in der Kopie beizubehalten: Änderungszeit, Zugriffszeit, Dateiflags, Dateimodus, Benutzer-ID und Gruppen-ID, wie von den Berechtigungen erlaubt. Zugriffskontrolllisten (ACLs) und erweiterte Attribute (EAs), einschließlich Ressourcenzweige, werden ebenfalls beibehalten.

Beachten Sie, dass dies die Zugriffszeit (atime) der Quelldatei ändern kann/wird, wie durch ls -lu angezeigt. Außerdem kann stat oder stat -x verwendet werden, um die Datenzugriffs-, Datenänderungs- und Dateistatus-Änderungszeiten schön anzuzeigen, zu denen bei macOS die Geburtszeit durch explizite Formatierung hinzugefügt werden kann :

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

Wenn Sie cp aus den GNU Coreutils verwenden, um nur die Zeitstempel und nicht Attribute wie Benutzer-ID, Gruppen-ID oder Dateimodus zu erhalten, gibt es die Langschrift --preserve, die es erlaubt, explizit eine Liste der zu erhaltenden Attribute anzugeben.

cp --preserve=timestamps source destination

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

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

Es gibt drei Zeiten auf einem Unix-Dateisystem, die Zugriffszeit (atime), die Änderungszeit (mtime) und die Inode-Wechselzeit (ctime). Sie können die Zugriffszeit und die Änderungszeit mit dem Programm touch ändern, z. B.

cp orig copy touch -r orig copy

Die Inode-Änderungszeit können Sie jedoch nicht ändern.

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

Ich musste kürzlich etwas Ähnliches machen, aber stattdessen einen Symlink verwenden. So erstellen Sie einen Symlink und behalten den ursprünglichen Zeitstempel bei: cp -ps src_file dst_symlink