移动目录时如何保留原始时间戳?
保留移动目录的原始时间戳解决方案
嗨,这个问题其实挺常见的——先给你理清楚背后的原因:
- 当你在同一文件系统下使用
mv移动目录时,本质只是修改了文件系统的索引记录,并没有真正移动文件数据,所以目录的时间戳(包括创建/修改时间)都会被保留,这时候根本不需要额外选项。 - 但如果是跨文件系统移动(比如从硬盘A移到硬盘B,或者从某个挂载点移到另一个),
mv的实际行为会变成「复制原目录到新位置,再删除原目录」,这时候新目录的时间戳就会变成复制操作的时间,而mv本身确实没有提供跨文件系统保留时间戳的参数,这就是你查手册找不到的原因。
那该怎么解决呢?给你两个靠谱的方案:
方案一:用cp归档复制后删除原目录
cp的-a参数(归档模式)会完整保留目录的所有属性,包括时间戳、权限、符号链接等,非常适合这种场景:
# 先归档复制源目录到目标位置 cp -a /path/to/your/source_dir /path/to/your/destination/ # 确认复制无误后,删除原目录 rm -rf /path/to/your/source_dir
如果你想更明确,也可以用cp -pR替代-a:-p负责保留权限和时间戳,-R负责递归处理目录,效果是一样的。
方案二:用rsync同步并清理源目录
rsync是更专业的文件同步工具,天生擅长保留文件属性,还能增量同步(如果目录很大的话更高效):
# 同步源目录到目标位置,同步完成后删除源文件 rsync -av --remove-source-files /path/to/your/source_dir/ /path/to/your/destination/source_dir/ # 因为--remove-source-files只会删除文件,不会删空目录,所以最后手动清理原目录 rm -rf /path/to/your/source_dir
这里要注意源目录末尾的/——如果加了/,会把源目录里的内容同步到目标目录;如果不加,会把源目录本身同步到目标目录下,根据你的需求调整就行。
额外提醒
操作前最好先对源目录做个简单备份(比如tar -czf backup.tar.gz source_dir),避免误操作导致数据丢失;如果是同一文件系统下移动后时间戳还是变了,那可能是你的系统或文件系统有特殊设置(比如某些日志型文件系统的特性),这种情况可以再排查一下文件系统的相关配置。
内容的提问来源于stack exchange,提问作者Moon




