Skip to main content
 首页 » 编程设计

shell之rsync 排除一个目录但包含一个子目录

2024年11月24日23Leo_wl

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

项目/规范/安装/项目1

我想要做的是排除 中的所有内容项目/规范目录但项目特定的安装目录:项目/规范/安装/项目1 .

rsync -avz --delete --include=specs/install/project1 \ 
    --exclude=specs/* /srv/http/projects/project/ \ 
     user@server.com:~/projects/project 

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

我已经尝试了一切,但我似乎没有让它起作用

请您参考如下方法:

有时它只是一个细节。

只需更改您的包含模式,在包含模式的末尾添加一个尾随/即可:

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) 手册页中的过滤规则部分。