Ich kann den Zeitstempel einer regulären Datei ändern:
touch -t 201301291810 myfile.txt
Mit einem Symlink konnte ich nicht dasselbe machen. Ist es möglich?
Distribution: RHEL 5.8
Ich kann den Zeitstempel einer regulären Datei ändern:
touch -t 201301291810 myfile.txt
Mit einem Symlink konnte ich nicht dasselbe machen. Ist es möglich?
Distribution: RHEL 5.8
Antworten:
add switch -h
touch -h -t 201301291810 myfile.txt
Mandatory arguments to long options are mandatory for short options too.
-a change only the access time
-c, --no-create do not create any files
-d, --date=STRING parse STRING and use it instead of current time
-f (ignored)
-h, --no-dereference affect each symbolic link instead of any referenced
file (useful only on systems that can change the
timestamps of a symlink)
-m change only the modification time
-r, --reference=FILE use this file's times instead of current time
-t STAMP use [[CC]YY]MMDDhhmm[.ss] instead of current time
Möglicherweise benötigen Sie eine neuere Version von touch
. Wenn dies keine Option ist und Sie C kennen, können Sie mit der lutimes-Funktion ein kleines Programm schreiben, um dies selbst zu tun .
Ein Brute-Force-Weg ist wie folgt:
0. delete the old symlink you wish to change
1. change the system date to whatever date you want the symlink to be
2. remake the symlink
3. return the system date to current.
Uhrzeit und Uhrzeit einer symbolischen Verknüpfung können mit der lutimes
Funktion geändert werden . Das folgende Programm funktioniert für mich unter MacOSX und Linux, um beide Male von einer beliebigen Datei in eine symbolische Verknüpfung zu kopieren:
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
int
main(int argc, char **argv)
{
struct timeval times[2];
struct stat info;
int rc;
if (argc != 3) {
fprintf(stderr, "usage: %s source target\n", argv[0]);
return 1;
}
rc = lstat(argv[1], &info);
if (rc != 0) {
fprintf(stderr, "error: cannot stat %s, %s\n", argv[1],
strerror(errno));
return 1;
}
times[0].tv_sec = info.st_atime;
times[0].tv_usec = 0;
times[1].tv_sec = info.st_mtime;
times[1].tv_usec = 0;
rc = lutimes(argv[2], times);
if (rc != 0) {
fprintf(stderr, "error: cannot set times on %s, %s\n", argv[2],
strerror(errno));
return 1;
}
return 0;
}
Wenn Sie die kompilierte Datei aufrufen copytime
, copytime file link
können Sie mit dem Befehl dafür sorgen, dass der Link dieselbe Uhrzeit und M-Zeit hat wie zuvor file
. Es sollte nicht allzu schwierig sein, das Programm so zu ändern, dass die in der Befehlszeile angegebenen Zeiten verwendet werden, anstatt die Zeiten aus einer anderen Datei zu kopieren.