我最近为我的 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
,但我从来没试过。可能还有其他的。