我正在尝试将文件与模式*/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
不是目录,则会强制命令失败。在某种程度上,它充当断言。