这听起来是一个很容易研究的问题。事实并非如此。我正在关注我偶然遇到的 Ubuntu Stack Exchange 网站上的以下强烈推荐的帖子。但该建议在 Red Hat Enterprise Linux ES 版本 4 上不起作用。我本来希望它能起作用,但它失败了,如下所述。
这是建议: 具体来说,海报推荐
如果您想相对于其现有修改时间修改文件,则可以执行以下操作:
touch -d "$(date -R -r 文件名) - 2 小时" 文件名
这在 Redhat 下对我不起作用。减号被忽略,时间提前两天设置,就像我输入的一样
touch -d "$(date -R -r filename) + 2 hours" filename
例如:
$ ls -al test
-rw-r----- 1 sc1478 dev 5 Oct 27 12:59 test
$ touch -d "$(date -R -r test) - 8 days" test
$ ls -al test
-rw-r----- 1 sc1478 dev 5 Nov 4 2016 test
$ touch -d "$(date -R -r test) + 8 days" test
$ ls -al test
-rw-r----- 1 sc1478 dev 5 Nov 12 2016 test
无论我使用减号还是加号,日期都会向前调整。
这是某些版本的 touch 中的错误吗?
是否有另一种方法来调整文件相对于其当前时间戳的时间戳?
答案1
更新答案
touch -r filename -d '+8 days' filename
来自info coreutils touch invocation
(谢谢@don_crissti):
'-r 文件'
'--reference=文件'
Use the times of the reference FILE instead of the current time. If this option is combined with the '--date=TIME' ('-d TIME') option, the reference FILE's time is the origin for any relative TIMEs given, but is otherwise ignored. For example, '-r foo -d '-5 seconds'' specifies a time stamp equal to five seconds before the corresponding time stamp for 'foo'. If FILE is a symbolic link, the reference timestamp is taken from the target of the symlink, unless '-h' was also in effect.
如果你想要变量扩展,你可以-d
像这样在参数周围使用软引号。
DAYS=8
touch -r filename -d "+${DAYS} days" filename
样本:
$ ls -l foo.bar
-rw-r--r-- 1 usr usr 69414810 Nov 10 2016 foo.bar
$ TEST=100
$ touch -r foo.bar -d "+${TEST} days" foo.bar
$ ls -l foo.bar
-rw-r--r-- 1 usr usr 69414810 Feb 24 2017 foo.bar