操作系统是 Debian 10,rsync 版本 3.1.3。我像这样运行 rsync:
time rsync -ar --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
这可以复制文件,但不会删除任何已删除的内容。 (要么从 src 中完全删除,要么在我的例子中,从 filelist.txt 中删除)这是一个大问题。我发现的唯一解决方法是简单地删除整个目标并再次复制所有内容,但这需要大量时间,并且基本上否定了首先使用 rsync 的意义。
这是一个错误吗?如何让 rsync 正常工作,尊重 --delete 标志,就像它应该的那样?
编辑:
例如:
- 如果 filelist.txt 包含“foo”,则 /path/to/dest 将包含“foo”。
- 如果 filelist.txt 包含“foo”和“bar”,则 /path/to/dest 将包含“foo”和“bar”。
- 如果 filelist.txt 包含“foo”、“bar”和“bat”,则 /path/to/dest 将包含“foo”、“bar”和“bat”。
- ETC
假设“foo”“bar”“bat”等是目录。
答案1
您需要告诉 rsync 删除丢失的参数:
rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
- 因此,如果您删除该目录,
foo
它也会被/path/to/dest
删除--delete-missing-args
。 foo
仍需列入filelist.txt
.- 需要该
--delete
参数才能允许 rsync 删除文件foo
夹中的文件
答案2
不会。不会rsync
因为文件列表不包含这些文件或者它为空而删除文件/目录。
如果您正在使用--files-from
它将尝试仅同步从源到目标列出的文件。
它不会仅仅因为传递给 的文件列表中不存在这些文件而删除它们--files-from
。
要使 --delete 工作,您需要使用实际的源路径..就像这样
rsync -ar --delete path/to/src path/to/destination