我最近为我的NAS购买了新的硬盘。 这意味着我正在复制NAS上的所有数据,将其升级,然后将数据移回。
我已经得到了从NAS复制数据,但每个文件的修改/创builddate已被更改为当它被复制(今天)。
有没有办法,记住我有原始数据,批量更新复制文件上的修改/创build的date,而不必复制它们(我们正在谈论一个TB的数据)?
touch可以改变访问和修改时间。 尝试像(未经testing):
find /path/to/source_files -exec touch --reference={} /path/to/dest/{} \;
如果目标path(复制的文件)被命名为它们原始位置的path的超集,这可以工作。 如果关系更复杂,则需要对path进行一些处理。
关于ctime,这是从info touch :
虽然'touch'提供了更改文件的两个时间选项(最后访问和修改时间),但实际上还有第三个选项:inode更改时间。 这通常被称为文件的'ctime'。 inode更改时间表示文件元信息上次更改的时间。 一个常见的例子是当文件的权限改变时。 更改权限不访问文件,所以atime不会更改,也不会修改文件,所以mtime不会更改。 然而,关于文件本身的一些东西已经改变了,这个地方必须注意到。 这是ctime领域的工作。 这是必须的,例如,一个备份程序可以创build一个全新的文件副本,包括新的权限值。 另一个修改文件的ctime而不影响其他文件的操作是重命名。 无论如何,在正常的操作中,用户不能将ctime字段更改为用户指定的值。
你如何处理文件?
* nix cp命令具有参数-p来保存时间戳。 也许你的系统上有类似的东西。
如果您使用Windows,您可以尝试xxcopy(有一个评估期)。 具体来说,这个开关很有用:
/TCC Copies the timestamp of Create Time fm src to dst.
http://www.xxcopy.com/xxtb_001.htm
(自己没有试过,但是之前有多次使用这个程序)
在* nix我会build议使用rsync 。
有Windows的DeltaCopy ,但我从来没有尝试过。 也许还有其他的。