`mv` 何时更改文件的时间戳,而何时不更改?

Tim*_*Tim 2 coreutils mv

移动目录而不修改时间戳表示 mv 更改目录的时间戳。

当我mv将文件从外部硬盘驱动器传输到另一个外部硬盘驱动器时,它也会更改目录的时间戳。

当我mv在本地文件系统中创建目录时,它不会更改目录的时间戳。

何时mv更改文件的时间戳和其他属性,何时不更改?谢谢。

Ed *_*imm 6

我记得在其他系统上遇到过这种情况,并且与现在显示的测试效果不同。我认为这些是实现差异。我在下面这样描述它们。

大多数实现mv尝试在移动文件时不更改文件的时间戳。但是,可能不会考虑移动后部分的影响。

这基本上意味着:

  • 如果您在文件系统中移动文件或目录,则该文件或目录上的时间戳不会改变。

  • 如果您将文件移动到不同的文件系统,其时间戳将重置为当前时间,因为这是秘密副本。但是,mv通常足够聪明,可以尽其所能恢复旧时间戳,因此访问时间和修改时间将“保持”相同,但更改时间戳将更新为当前时间。

  • 如果将空目录移动到不同的文件系统,则适用相同的规则。

  • 如果您将包含内容的目录移动到不同的文件系统,mv将创建mkdir一个新目录,复制权限和所有权,并恢复原始时间……然后将该目录的内容移动到其中,更新其时间戳。一些实现解决了这个问题(比如 GNU coreutils mv8.29),而另一些则没有(比如我记得之前测试过这种行为的那些)。

  • mv始终更新它移动文件/目录的目录的时间戳以及它移动文件/目录的目录。(基本上,它会修改这些目录,所以它当然会更新它们的修改时间戳,只要有问题的文件系统具有修改时间戳。据我所知,这就是全部。)