如何使链接具有与目标文件相同的时间戳

如何使链接具有与目标文件相同的时间戳

假设您有file一个给定的文件mtime。如果我创建一个指向sym通过file符号ln -s链接本身的符号链接,则会获得一个mtime与创建时间相对应的 -stamp,它与ofsymlink不同。mtimefile

那么有没有办法创建一个符号链接,使其mtime与它指向的文件相同?

这个问题的背景是脚本,其中创建云镜像的 n 个最新文件的链接目录。现在,如果我ls -lt在这个目录中这样做current,它不会显示实际文件的创建日期,而是显示符号链接的创建日期。但我想查看文件的创建日期。

编辑 在我原来的帖子中,我错误地要求了 ctime (我在上面更改了它),但是问题应该是关于 mtime 的。感谢@ilkkachu 指出这一点。

答案1

你指的是ctime还是mtime? Ctime 是文件元数据(inode 内容)最近一次更改的时间或者文件内容。它会在写入时更新,但也会在权限发生更改时更新。 mtime是最近一次写入文件数据的时间,可以用 更改touch,而ctime通常不能更改。

因为它可以为副本重置,所以 mtime 通常是更有用的。它也是ls -lt显示的(您需要添加-c以显示 ctime)。

您可以用来touch -h更改符号链接的运行时间:

$ ls -lt
total 4
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Sep  4 15:10 link.txt -> hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31  1999 hello.txt

$ touch -h -r hello.txt  link.txt 
$ ls -lt
total 4
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31  1999 hello.txt
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Dec 31  1999 link.txt -> hello.txt

但这仍然需要手动完成,如果目标文件发生更改,它不会自动更新。但您可以让它ls -L打印目标文件的详细信息,而不是链接本身:

$ touch hello.txt 
$ ls -L -lt
total 8
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep  4 15:12 hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep  4 15:12 link.txt

当然,它也隐藏了一个事实:它本来就是一个链接。

如果您需要混合输出,并显示链接名称和目标以及指向文件的日期和所有权,您可能需要使用 Perl 之类的工具来创建该列表。

答案2

lntouch系统调用都utimensat不能ctime更改,只有mtime& atime

如果这是你的事真的需要做的,那么你唯一的选择就是推出你自己的系统调用/内核模块/用户空间 exe。

答案3

不,符号链接本身并没有任何有用的元数据(时间戳、所有者、权限)。

但是,您可以使用-Hwithls来取消引用(即跟随)符号链接。或者-Lstat.

或者您可以readlink -e在我对链接问题的回答中使用 as 来获取它们符号链接所指向的内容的完整规范路径名。

相关内容