例如,我知道我的时间偏移有几个小时(可能是因为我的系统时钟在某个时间提前了几个小时)。在这种情况下,我将如何批量更改特定目录中所有文件的“上次修改”日期?
请注意,不同的文件需要将其修改时间更改为不同的值。
答案1
如果要对文件的修改时间应用相对偏移量,可以使用touch(1)
和的组合来实现stat(1)
。 touch 支持相对时间,但它们是相对于现在的时间,而不是文件上的当前时间。相反,您可以使用 stat 获取当前修改时间并应用偏移量。
例如,要将 -2 小时偏移应用于文件的修改时间:
touch -m -d @$(( $(stat -c %Y file.txt) - 7200 )) file.txt
stat -c %Y file.txt
file.txt
获取自纪元以来的秒数修改时间。使用bash算术展开,您可以进行计算,在本例中是减去 7200 秒(2 小时)。使用触摸-m
更改修改时间并-d
指定日期,您可以将修改时间设置为计算出的时间。这@
是一个时间格式说明符,表示给定时间以自纪元以来的秒数为单位。
如果将其放入 shell 脚本中,则可以从中调用它find
或xargs
让您使用 find 来选择要更改的文件。
#!/bin/bash
for file ; do
touch -m -d @$(( $(stat -c %Y "$file") - 7200 )) "$file"
done
这会将更改应用于作为参数传递的所有文件的修改时间。
答案2
在正确的时间手动修改一个文件(使用touch ... TEMPLATE
)。
然后通过引用该文件(使用 )来更改其余部分touch -r TEMPLATE TARGET
。
答案3
touch -m -r file.txt -d '-1 hour' file.txt