rsync --include-from & delete = 删除多余的文件

rsync --include-from & delete = 删除多余的文件

我有 2 个目录:src 和 dst。src 仅包含 1 个文件“index.php”。dst 包含“index.php”和“readme.txt”。我还有一个 list.txt 文件,其中仅包含一行:“index.php”。

现在,在包含 src 和 dst 的目录中,我执行以下命令:

rsync -av --include-from=list.txt src/ dst/ --del  

如果需要,它会更新“index.php”文件,但它也会删除 readme.txt。

如果它不在 list.txt 文件中,为什么要删除它?有什么简单的方法可以“修复”此行为吗?

我基本上想要让 rsync 只关注列表中的文件。它们可能需要更新或删除(因此使用 --del 选项),但我不想让它触及其他文件。我不能使用“--files-from”选项,因为它不会删除目标中的文件。

编辑:“index.php”在这里只是一个例子 - 事实上太简单的例子,因为 src 和 dst 可能包含整个目录树,所以如果 list.txt 有一个像“abc/test.php”这样的条目,它也应该适用于这个文件。

答案1

解决方案是添加--exclude=*

 rsync --verbose  -r --del --include-from=list.txt --exclude=* src/ dst/

仅更新来自的文件,仅当它们不存在时才list.txt删除dstsrc 包含在内list.txt

答案2

这看起来可能有点小题大做,但对我来说却很有效:

rsync -r -av --include-from=list.txt --files-from=list.txt --delete-missing-args src/ dst/

但是,它会根据更新/删除的文件具体更新该文件。

即,如果同名文件位于不同的子目录中,它不会更改或删除,只会根据其在 src/ 父目录中的位置进行更改或删除。

相关内容