![同步移动、复制和删除操作,而不仅仅是文件](https://linux22.com/image/1564235/%E5%90%8C%E6%AD%A5%E7%A7%BB%E5%8A%A8%E3%80%81%E5%A4%8D%E5%88%B6%E5%92%8C%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C%EF%BC%8C%E8%80%8C%E4%B8%8D%E4%BB%85%E4%BB%85%E6%98%AF%E6%96%87%E4%BB%B6.png)
我想知道是否存在任何同步方法,如果文件已经在目标文件夹中,则不会复制文件。
让我解释:
我拍了一些照片,并将它们放在笔记本电脑的一个文件夹中。为了将它们备份到我的 Ubuntu 服务器上,我只需运行rsync -vrutP source des/ti/na/tion/
。然后我决定将所有 RAW 放在笔记本电脑的一个子文件夹中 ( source/RAW
),将 JPG 放在另一个子文件夹中 ( source/JPG
)。
现在,如果我想将其镜像到服务器,我必须运行,rsync -vrutP --delete source/ des/ti/na/tion/
但如果我这样做,我的所有文件都会从服务器中删除,然后再从我的笔记本电脑复制到服务器。我有几 GB 的图片,如果有时间等待并且有以太网连接而不是 WiFi,这不是问题。
但是,如果有一个命令可以比较根文件夹“源”中的文件并仅应用源和目标之间的位置差异,那么速度会不会快得多,即使对 CPU 的要求更高?列出所有文件需要更多 CPU,但我几乎不需要带宽来传输我不需要传输的文件,因为它们已经在目标中了,即使它们在不同的地方。当然,一个必备的功能是增量同步,它还可以检测现有(但已移动)的文件是否与源文件夹中的文件完全相同。
我知道有软件可以做到这一点(Syncovery、Goodsync),但我实际上想知道在 Linux 和 Windows 上是否有任何命令可以做到这一点。
答案1
一方面是的……因为你处于一个非常具体的用例中。另一方面,在 Linux 中移动或重命名文件是同样的事情。要发现源上的文件是否刚刚被重命名,系统必须将其(或其哈希值)与备份中的所有文件进行比较,因此必须读取备份中的所有文件来计算它们的哈希值……这将非常耗时,除非哈希值保存在侧面数据库中。有些存储系统可以这样做……但不是你的普通文件系统。