我知道如何更改常规文件的时间戳:
touch -t 201301291810 myfile.txt
我无法使用符号链接执行相同的操作。是否可以?
发行版:RHEL 5.8
答案1
添加开关-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
答案2
您可能需要更新版本的touch
.如果这不是一个选项,并且您了解 C,您可以使用以下命令自己编写一个小程序:卢泰姆函数。
答案3
暴力破解的方法如下:
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.
答案4
可以使用该函数更改符号链接的 atime 和 mtime lutimes
。以下程序适用于 MacOSX 和 Linux 上,可将任意文件两次复制到符号链接:
#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;
}
如果调用编译后的文件copytime
,则可以使用该命令copytime file link
使链接具有与链接相同的atime和mtime file
。修改程序以使用命令行上指定的时间而不是从另一个文件复制时间应该不会太困难。