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

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

Advertisement

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.

Advertisement
Advertisement

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
Advertisement
11
11
2010-02-27 11:23:37 +0000
Advertisement

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

Advertisement

Verwandte Fragen

10
37
7
14
2
Advertisement
Advertisement