![如何检查符号链接的时间戳?](https://linux22.com/image/158456/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E7%9A%84%E6%97%B6%E9%97%B4%E6%88%B3%EF%BC%9F.png)
当符号链接比原始文件旧时,有没有办法使用传统命令来更新符号链接?
我使用 Seafile 服务器(类似于 Dropbox)向我的学生提供某些文件。所以我共享了一个目录并创建了这些文件的链接。 Seafile 和 Dropbox 都不关心链接,而是将实际文件复制到服务器。
问题是,如果我更新实际文件,链接时间戳不会更改,并且文件的新版本不会上传到服务器。
我尝试了这个简单的测试:
[ ./shared/the-symlink -ot ./actualfiles/pontedfile ] && touch -h ./shared/the-symlink
不幸的是,test
取消引用链接并将文件的时间戳与其自身进行比较,结果当然是错误的。
另请注意,符号链接必须比链接文件新。我不需要将其设置为相同的时间戳。
有没有办法test
检查链接的时间戳而不是指向的文件?
我试图避免的其他解决方案:
- 复制文件而不是链接是可行的,但我必须消耗太多磁盘空间,因为文件通常很大;
touch
所有符号链接也可以工作,但所有文件都会一次又一次地复制到服务器; (没问题:参见下面的编辑)
我愿意一个比将时间戳转换为字符串并由我自己进行比较更优雅的解决方案......
这个头对我来说不是一个解决方案。
编辑:
这不是问题的答案,但它是我的问题的解决方案:touch -h *
更新所有符号链接时间戳。 Seafile 认识到这一变化并采取行动。幸运的是,它现在使用实际文件时间戳重新检查并仅上传更改的文件。
编辑2:
使用作品的解决方案stat
:stat -c "%Y"
.谢谢史蒂夫。
答案1
stat
将给出符号链接本身的时间戳。
所以像下面这样的方法是可行的
[[ $(stat -c '%Y' b) -lt $(stat -c '%Y' a) ]] && touch .......