![我怎样才能将一个(大)目录复制到另一个目录上并仅更改不同的文件?](https://linux22.com/image/1264223/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E5%B0%86%E4%B8%80%E4%B8%AA%EF%BC%88%E5%A4%A7%EF%BC%89%E7%9B%AE%E5%BD%95%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%8A%E5%B9%B6%E4%BB%85%E6%9B%B4%E6%94%B9%E4%B8%8D%E5%90%8C%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有目录 a 和目录 b。它们很大。b 几乎与 a 相同。“几乎”意味着有 4-5 个文件不同,但我不知道它们是什么。我想将 b 复制到 a 上,但只复制不同的文件。我在 bash 中。
(不,我不能简单地删除 a 并用 b 替换它,因为 1)a 是版本控制的 2)完整复制(或 mv)会花费太多时间。我只想复制不同的文件)。
答案1
你可以使用rsync
它来执行此操作,我使用的命令是rsync -tr "folder to copy from" "folder to copy to"
例如rsync -tr /home/me/stuff/* /home/me/otherstuff/
答案2
也可以用旧的方法来做到这一点cp
:
感谢 srcspider 提醒我使用-T
!
cp -ruT old-dir new-dir
答案3
另一个不错的选择是 Unison (http://www.cis.upenn.edu/~bcpierce/unison/),特别是如果实际上没有“源”和“目标”。每个目录都是一个根目录,Unison 会同步它们并保留元数据以供将来同步。它提供了命令行和 GUI 选项,也可以轻松地通过 cron 进行安排。
我使用它将我的 Dropbox 备份到无法运行 Dropbox 客户端的本地 NAS 设备。
答案4
您可以比较这两个目录的差异。
diff -r 目录1 目录2
它将显示不同的文件列表