我正在将文件从一台机器复制到另一台机器。机器 A 的文件位于:
/usr/a/foo/*
/usr/b/foo/*
/usr/c/foo/*
/usr/d/foo/*
机器 B 希望这些文件位于:
/foo-1.2.3/usr/a/*
/foo-1.2.3/usr/b/*
/foo-1.2.3/usr/c/*
/foo-1.2.3/usr/d/*
我可以使用 展平结构rsync -ae ssh user@remote:/var/*/foo/ /foo-1.2.3/var/
,并且可以单独复制四个目录中的每一个,但我不知道是否可以在单个命令中完成此操作,而无需求助于外部帮助程序(awk、sed、perl... )。
请注意,此时这纯粹是出于好奇,因为弄清楚这一点所花费的时间比制作四个单独副本所花费的时间更长。
答案1
您可以使用包含/排除规则来做到这一点。像(未经测试)的东西:
rsync -a --include=*/foo/*** --exclude=* user@remote:/usr/ /foo-1.2.3/usr
是***
在 中介绍的rsync 2.6.7
。如果没有它,您需要一个包含目录 ( foo/
) 和另一个包含内容 ( foo/**
)。请注意,当您使用这样的包含时,您需要有一个适当广泛的排除作为最后一个规则,因为默认情况下包含所有内容,并且根据规则列表中的第一个匹配项包含/排除文件(--exclude=*
首先放置不会复制任何东西)。