rsync 过滤器不起作用,排除所有文件

rsync 过滤器不起作用,排除所有文件

我正在尝试将文件与模式*/ls从文件夹 /bin 同步到文件夹 test:

mkdir test
rsync -avv --exclude='*' --include=*/ls /bin/ test/
ls test

从输出来看,包含过滤器无法工作:

[sender] hiding file ls because of pattern *

有谁知道出了什么问题吗?

答案1

排除和包含过滤器是从左到右评估的。在您的命令行中,这意味着所有内容都被排除。包含过滤器没有任何效果,因为排除模式已经匹配了每个可以想象的名称。

相反,要复制ls/bin或其任何子目录调用的每个文件,请使用

rsync -av -m --include='*/' --include='ls' --exclude='*' /bin/ test/

将包含模式放在第一位,最后排除所有未明确包含的内容。您将需要匹配*/包含模式,因为您可能想要进入子目录(至少在一般情况下)。我还添加了-m,这可以避免在目标中没有文件的情况下创建目录。

如果您不需要递归并希望/bin/ls使用 复制rsync,则使用

rsync -av /bin/ls test/

此处显示的两个命令中目标路径名末尾的斜杠是不必要的,但如果test不是目录,则会强制命令失败。在某种程度上,它充当断言。

相关内容