首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >rsync排除一个目录,但包括一个子目录

rsync排除一个目录,但包括一个子目录
EN

Stack Overflow用户
提问于 2011-11-25 22:30:37
回答 3查看 20K关注 0票数 28

我正在尝试使用rsync将一个项目复制到我的服务器上。我在一个子目录中有特定于项目的安装脚本

project/specs/install/project1

我尝试做的是排除项目/specs目录中的所有内容,但特定于项目的安装目录除外:project/specs/install/project1.

代码语言:javascript
复制
rsync -avz --delete --include=specs/install/project1 \
    --exclude=specs/* /srv/http/projects/project/ \
     user@server.com:~/projects/project

但是,就像这样,specs目录的内容被排除了,但是install/project1目录没有包括在内。

我什么都试过了,但就是不能让它起作用

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-25 23:01:00

有时候这只是一个细节。

只需更改您的include模式,在include模式的末尾添加一个尾随/,它就会起作用:

代码语言:javascript
复制
rsync -avz --delete --include=specs/install/project1/ \
    --exclude=specs/* /srv/http/projects/project/ \
    user@server.com:~/projects/project

或者,准备一个过滤器文件,如下所示:

代码语言:javascript
复制
$ cat << EOF >pattern.txt
> + specs/install/project1/
> - specs/*
> EOF

然后使用--filter选项:

代码语言:javascript
复制
rsync -avz --delete --filter=". pattern.txt" \
    /srv/http/projects/project/ \
    user@server.com:~/projects/project

有关更多信息,请转到rsync(1)手册页的过滤规则部分。

票数 38
EN

Stack Overflow用户

发布于 2016-05-14 05:43:35

另一种解决方案在这里不起作用。

可靠的方式

您别无选择,只能手动下载子目录的每一级。没有包含不需要的文件的风险,因为rsync不包含包含目录的文件。

1)创建一个包含过滤文件,例如"include_filter.txt":

代码语言:javascript
复制
+ /specs/
+ /specs/install/
+ /specs/install/project1/***
- /specs/**

2)运行:

代码语言:javascript
复制
rsync -avz --delete --include-from=include_filter.txt \
    /srv/http/projects/project/ \
    user@server.com:~/projects/project

包含文件不要忘记开始斜杠"/",否则您可能会匹配名为"**/specs/install/project1/".

  • By的子目录,选择一个包含类型过滤器(---
  • =
  • ),开始加号"+“实际上是可选的,因为这是没有符号的默认操作。(您可以使用相反的"-“,默认情况下,双星"**”表示“--exclude-from=FILE.)
  • The path”
  • 三星“*”表示“任何路径,包括此目录”

Easy way

您可以开始您的过滤器"*/",允许rsync下降到您的所有子级别。这很方便,但是:

  • 将包括所有目录,尽管为空。可以使用rysnc选项-m修复此问题,但随后将跳过所有空目录。

1)创建一个包含过滤文件,例如"include_filter.txt":

代码语言:javascript
复制
+ /**/
+ /specs/install/project1/***
- /specs/**

2)运行:

代码语言:javascript
复制
rsync -avzm --delete --include-from=include_filter.txt \
    /srv/http/projects/project/ \
    user@server.com:~/projects/project

请注意添加的选项-m。

票数 11
EN

Stack Overflow用户

发布于 2018-10-29 19:48:00

--include--exclude的顺序会影响要包含或排除的内容。

当存在要包含的特定子目录时,需要将它们放在第一位。

类似的帖子可以在here上找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8270519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档