更改符号链接的时间戳

更改符号链接的时间戳

我知道如何更改常规文件的时间戳:

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。修改程序以使用命令行上指定的时间而不是从另一个文件复制时间应该不会太困难。

相关内容