我正在尝试使用rsync将一个项目复制到我的服务器上。我在一个子目录中有特定于项目的安装脚本
project/specs/install/project1
我尝试做的是排除项目/specs目录中的所有内容,但特定于项目的安装目录除外:project/specs/install/project1.
rsync -avz --delete --include=specs/install/project1 \
--exclude=specs/* /srv/http/projects/project/ \
user@server.com:~/projects/project
但是,就像这样,specs目录的内容被排除了,但是install/project1目录没有包括在内。
我什么都试过了,但就是不能让它起作用
发布于 2011-11-25 23:01:00
有时候这只是一个细节。
只需更改您的include模式,在include模式的末尾添加一个尾随/,它就会起作用:
rsync -avz --delete --include=specs/install/project1/ \
--exclude=specs/* /srv/http/projects/project/ \
user@server.com:~/projects/project
或者,准备一个过滤器文件,如下所示:
$ cat << EOF >pattern.txt
> + specs/install/project1/
> - specs/*
> EOF
然后使用--filter选项:
rsync -avz --delete --filter=". pattern.txt" \
/srv/http/projects/project/ \
user@server.com:~/projects/project
有关更多信息,请转到rsync(1)手册页的过滤规则部分。
发布于 2016-05-14 05:43:35
另一种解决方案在这里不起作用。
可靠的方式
您别无选择,只能手动下载子目录的每一级。没有包含不需要的文件的风险,因为rsync不包含包含目录的文件。
1)创建一个包含过滤文件,例如"include_filter.txt":
+ /specs/
+ /specs/install/
+ /specs/install/project1/***
- /specs/**
2)运行:
rsync -avz --delete --include-from=include_filter.txt \
/srv/http/projects/project/ \
user@server.com:~/projects/project
包含文件不要忘记开始斜杠"/",否则您可能会匹配名为"**/specs/install/project1/".
Easy way
您可以开始您的过滤器"*/",允许rsync下降到您的所有子级别。这很方便,但是:
1)创建一个包含过滤文件,例如"include_filter.txt":
+ /**/
+ /specs/install/project1/***
- /specs/**
2)运行:
rsync -avzm --delete --include-from=include_filter.txt \
/srv/http/projects/project/ \
user@server.com:~/projects/project
请注意添加的选项-m。
发布于 2018-10-29 19:48:00
https://stackoverflow.com/questions/8270519
复制相似问题