![`mv` 什么时候改变文件的时间戳,什么时候不改变?](https://linux22.com/image/148908/%60mv%60%20%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E6%94%B9%E5%8F%98%E6%96%87%E4%BB%B6%E7%9A%84%E6%97%B6%E9%97%B4%E6%88%B3%EF%BC%8C%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E4%B8%8D%E6%94%B9%E5%8F%98%EF%BC%9F.png)
移动目录而不修改时间戳表示 mv 更改目录的时间戳。
当我将mv
文件从外部硬盘驱动器转移到另一个外部硬盘驱动器时,它也会更改目录的时间戳。
当我mv
访问本地文件系统中的目录时,它不会更改目录的时间戳。
何时mv
更改文件的时间戳和其他属性,何时不更改?谢谢。
答案1
我记得在其他系统上遇到过这个问题,并且与现在测试显示的效果不同。我认为这些是实现上的差异。我在下面这样描述它们。
大多数实现都mv
尝试在移动文件时不更改文件的时间戳。然而,可能不考虑移动后部分的影响。
这基本上意味着:
如果您要移动文件系统中的文件或目录,则该文件或目录上的时间戳不会更改。
如果将文件移动到不同的文件系统,其时间戳将重置为当前时间,因为这是秘密副本。然而,
mv
通常足够聪明,可以尽最大能力恢复旧时间戳,因此访问时间和修改时间将“保持”相同,但更改时间戳将更新为当前时间。如果将空目录移动到不同的文件系统,则适用相同的规则。
如果将包含内容的目录移动到不同的文件系统,
mv
将创建mkdir
一个新目录,复制权限和所有权,并恢复原始时间...然后将该目录的内容移入其中,更新其时间戳。有些实现修复了这个问题(例如 GNU coreutilsmv
8.29),而其他实现则没有(例如我记得之前测试过此行为的实现)。mv
将要总是更新文件/目录从中移动的目录以及文件/目录移入的目录的时间戳。 (基本上,它修改这些目录,所以当然它会更新它们的修改时间戳,只要相关文件系统具有修改时间戳。据我所知,这就是全部。)