You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用tar进行备份且不覆盖同名同时间戳的文件?

解决方案:用tar的--update参数实现高效增量备份

首先,你的核心需求是:只更新目标目录中不存在、或时间戳比源文件旧的文件,跳过同名且时间戳一致的文件,同时要比rsync更快。tar本身就有参数能直接实现这个,不用绕弯子。

直接可用的命令

替换你原来的管道命令,加上--update(缩写-u)参数即可:

tar cvf - --update -C source/ . | tar xvf - -C dest/

或者更简洁的缩写版:

tar cvuf - -C source/ . | tar xvf - -C dest/

为什么这个能解决问题?

  • --update参数的核心作用是:tar在打包时,会直接对比源目录的文件和目标目录的同名文件,只将以下两类文件加入归档:
    • 目标目录中完全不存在的文件
    • 目标目录中存在,但源文件修改时间戳更新的文件
  • 这样通过管道解压到目标目录时,只会覆盖那些真正需要更新的文件,完全不会触碰同名且时间戳一致的文件,完美匹配你的需求。

对比你之前的尝试

  • 你提到的--backup=simple:这个参数是在解压时,只要遇到同名文件就自动备份(比如添加~后缀),不管时间戳是否一致,会产生大量不必要的备份文件,也无法实现“只更新旧文件”的核心需求,所以并不适用。
  • 为什么比rsync快?rsync默认会对文件做校验(哪怕是本地复制场景),而tar的--update只对比时间戳,加上流式打包的特性,在本地复制、尤其是大文件较多的场景下,速度会明显快于rsync。

额外注意事项

  • 如果不需要打包和解压过程的输出(安静模式),可以去掉v参数,命令变为:tar cuf - -C source/ . | tar xf - -C dest/
  • 这个命令天然支持所有特殊文件名(含空格、特殊字符),因为tar是直接遍历目录结构,不需要额外的字符转义处理。

内容的提问来源于stack exchange,提问作者mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:14:09