我找到了这个问题的多个答案,所以想问问实际使用它的人,而不是只想通过填写随机的半无用信息来制作最大的博客。
场景:我
rsync -av --progress /dir/a /dir/b
和它做它的事。
我将新文件添加到 /dir/a 并再次运行相同的命令,它知道它做了什么并且只复制新文件。
我将新文件添加到 /dir/a 并重命名 /dir/b 中的一些文件,并且可能还会删除一些文件。
如果我rsync -av --progress /dir/a /dir/b
再次运行,将复制什么?只是新文件,因为它知道它以前复制的内容,或者也被重命名/删除的文件,因为它们不再存在。
作为奖励,如果再次复制先前复制的文件,有没有办法防止这种情况发生,以便只复制 /dir/a 的新增内容?
目前我很乐意手动检查,但随着数据变得越来越大,我将需要更多的自动化来执行这项任务。
不,它不知道它在之前的运行中做了什么。它将接收端的数据与要发送的数据进行比较。对于足够小的数据,这不会很明显,但是当您有足够大的目录时,很容易感觉到在复制实际开始之前比较所花费的时间。
默认检查文件修改时间和大小。来自
man rsync
:和:
请注意,您使用的选项并不暗示这些。
-a
是:一般的
如果我理解正确,
rsync -av
没有内存,所以它也会复制重命名/删除的文件,因为它们存在于源中但不再存在于目标中。提示
使用选项“试运行”来检查运行命令行
-n
之前发生的情况。rsync
注意源目录后面的斜杠的特殊含义,看看两者的区别
和
这在手册中有所描述
man rsync
。例子
您的特殊情况(将文件添加到源目录“a”并从目标目录“b”中删除文件)将添加添加的文件和先前复制的文件,因为它仍在源目录中。无论有没有该选项
-u
,都会发生这种情况,如果您想将其保留在源目录中,我不知道有任何选项rsync
可以轻松解决该问题。但是您可以将它从源目录中删除或将文件名放入文件中
excluded
并使用该选项--exclude-from=excluded
(对于许多文件)或仅--exclude=PATTERN
用于一个或几个文件。选择:
unison
您可能想测试该工具
unison
,它是一个同步工具。它提供了一种可视化的方法来识别特殊情况并决定做什么。有一个 GUI 版本 (unison-gtk
)。它只复制 /dir/a 中的新文件。除非您使用 --delete 选项,否则您在 /dir/b 中所做的任何事情都将被忽略。在这种情况下,/dir/b 中重命名的文件将被删除。它将强制 /dir/b 变得与 /dir/a 完全一样。
关于奖金,你的意思是像在 /dir/a 中重命名文件,然后 rsync 到 /dir/b 的情况?在这种情况下,我认为没有办法阻止 rsync 再次复制文件。