You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

移动目录时如何保留原始时间戳?

保留移动目录的原始时间戳解决方案

嗨,这个问题其实挺常见的——先给你理清楚背后的原因:

  • 当你在同一文件系统下使用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

火山引擎 最新活动