批量更改修改/创建日期?

批量更改修改/创建日期?

我最近为我的 NAS 买了新硬盘。这意味着我要从 NAS 复制所有数据,对其进行升级,然后再将数据移回。

我已经从 NAS 复制了数据,但是每个文件的修改/创建日期已更改为复制日期(今天)。

有没有办法,记住我有原始数据,批量更新复制文件的修改/创建日期,而不必再次复制它们(我们讨论的是超过一兆字节的数据)?

答案1

touch可以更改访问和修改时间。尝试以下方法(未经测试):

find /path/to/source_files -exec touch --reference={} /path/to/dest/{} \;

如果目标路径(复制的文件)被命名为其原始位置路径的超集,则此方法可行。如果关系更复杂,则需要对路径进行一些操作。

关于 ctime,这是来自info touch

尽管“touch”提供了更改文件的两个时间(上次访问和修改时间)的选项,但实际上还有第三个时间:inode 更改时间。这通常称为文件的“ctime”。inode 更改时间表示文件元信息上次更改的时间。一个常见的例子是文件权限更改时。更改权限不会访问文件,因此 atime 不会更改,也不会修改文件,因此 mtime 不会更改。但是,文件本身的某些内容已更改,必须在某处注意这一点。这是 ctime 字段的工作。这是必要的,以便例如备份程序可以制作文件的新副本,包括新的权限值。另一个修改文件 ctime 而不影响其他文件的操作是重命名。无论如何,在正常操作中,用户不可能将 ctime 字段更改为用户指定的值。

答案2

您如何处理这些文件?

*nix命令有保留时间戳的cp参数。也许你的系统上也有类似的命令。-p

答案3

如果您使用的是 Windows,您可以尝试 xxcopy(有评估期)。具体来说,这个开关看起来很有用:

/TCC  Copies the timestamp of Create Time fm src to dst.

http://www.xxcopy.com/xxtb_001.htm

(我自己没有尝试过,但是之前用过这个程序很多次)

答案4

在 *nix 上我建议使用rsync

Windows有DeltaCopy,但我从来没试过。可能还有其他的。

相关内容