我查遍了互联网,查看了正则表达式网站和其他所有内容,但我无法编写 rsync 命令来获取我想要的内容。
我需要镜像 FreeBSD 版本,但不需要 RC 版本和 BETA 版本,因此我只需将名称中带有 RELEASE 的任何文件夹与该文件夹的所有文件和子文件夹进行 rsync。
此时我运行此命令但没有成功:
rsync -vaz --delete --dry-run ftp2.br.freebsd.org::FreeBSD/releases/amd64 /usr/repos --include=".{0,}(RELEASE)" --filter="-! */"
让我们想象一下以下文件夹结构:
amd64/8.3-RELEASE/
amd64/8.4-RC2/
amd64/amd64/10.0-RC5/
amd64/amd64/10.0-RELEASE/
amd64/amd64/9.1-RELEASE/
amd64/amd64/9.2-BETA1/
amd64/amd64/9.2-BETA2/
amd64/amd64/9.2-RC1/
在这种情况下,rsync 应该只得到:
amd64/8.3-RELEASE/
amd64/amd64/10.0-RELEASE/
amd64/amd64/9.1-RELEASE/
答案1
尝试这个:
$ rsync -vaz --delete --dry-run ftp2.br.freebsd.org::FreeBSD/releases/amd64 /usr/repos \
--include="*RELEASE/***" --include="*/" --exclude="*" --prune-empty-dirs
我想这就是你的追求。