如何批量转换特定目录中的“上次修改”日期?

如何批量转换特定目录中的“上次修改”日期?

例如,我知道我的时间偏移有几个小时(可能是因为我的系统时钟在某个时间提前了几个小时)。在这种情况下,我将如何批量更改特定目录中所有文件的“上次修改”日期?

请注意,不同的文件需要将其修改时间更改为不同的值。

答案1

如果要对文件的修改时间应用相对偏移量,可以使用touch(1)和的组合来实现stat(1)。 touch 支持相对时间,但它们是相对于现在的时间,而不是文件上的当前时间。相反,您可以使用 stat 获取当前修改时间并应用偏移量。

例如,要将 -2 小时偏移应用于文件的修改时间:

touch -m -d @$(( $(stat -c %Y file.txt) - 7200 )) file.txt

stat -c %Y file.txtfile.txt获取自纪元以来的秒数修改时间。使用bash算术展开,您可以进行计算,在本例中是减去 7200 秒(2 小时)。使用触摸-m更改修改时间并-d指定日期,您可以将修改时间设置为计算出的时间。这@是一个时间格式说明符,表示给定时间以自纪元以​​来的秒数为单位。

如果将其放入 shell 脚本中,则可以从中调用它findxargs让您使用 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

相关内容