更改符号链接的时间戳


31

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

touch -t 201301291810 myfile.txt

我无法通过符号链接执行相同的操作。可能吗?

发行版:RHEL 5.8


2
您要解决的问题是什么?
mdpc

2
但是,为什么。。。您正在尝试解决更多全球性问题?这仅仅是美学,还是有真实目的?
mdpc

7
那无关紧要。我没有考虑我的业务逻辑
两栖游戏,2013年

5
此类信息可帮助我们所有人找到适合您的解决方案。它不是无情的。抱歉,您太敏感了,我只是想提供帮助。
mdpc

4
伙计,这无关紧要。只需将时间戳记更改为给定的常数即可。您可以质疑所有您想问的问题,但我的观点并没有改变。有效地使提问变得毫无用处。祝你好运
两栖游戏,2013年

Answers:


45

添加开关-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

> touch -h -t 201301291810 mysymlink-> touch:无效的选项-h尝试“ touch --help”以获取更多信息。
两栖游戏,2013年

2
请看报价“仅在可以更改符号链接时间戳的系统上有用”。
mdpc

3
它也是最近才添加的(它不在2010年的联机帮助页中)。也许他只需要获取最新版本的coreutils。这是2009
Random832

如果这是正确的答案,请这样标记。
qodeninja

@qodeninja六年以后,我真的不希望OP能够以一种或另一种方式对其进行标记。
斯蒂芬


0

暴力方式如下:

 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.

让我感到好奇,什么系统需要这个?顺便说一句,在尚未确定系统日期的同时创建的任何文件也将具有该时间戳记
Aquarius Power

因为一旦创建,便无法修改symlink索引节点。
mdpc

0

可以使用lutimes函数更改符号链接的atime和mtime 。以下程序在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。修改程序以使用命令行上指定的时间,而不是从另一个文件复制时间,应该不会太困难。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.