rsync 仅包含子目录

rsync 仅包含子目录

目前,我正在努力寻找一种解决方案,仅包含子目录中的文件,但排除所有其他内容。文件结构看起来像这样

$ tree ../
../
├── from
│   ├── a
│   │   ├── aa
│   │   │   └── x.txt
│   │   ├── a.txt
│   │   └── b.txt
│   └── b
│       ├── b.txt
│       └── c.txt
└── to

并且只有a/aa/中的内容才会被转移到/中。

$ rsync -avh --include=a/aa/*** --exclude=* ../from/ ../to/

不起作用并且 to/ 保持为空,但是使用 a/ 执行此操作

$ rsync -avh --include=a/*** --exclude=* ../from/ ../to/

有用

$ tree ../
..
├── from
│   ├── a
│   │   ├── aa
│   │   │   └── x.txt
│   │   ├── a.txt
│   │   └── b.txt
│   └── b
│       ├── b.txt
│       └── c.txt
└── to
    └── a
        ├── aa
        │   └── x.txt
        ├── a.txt
        └── b.txt

但a.txt和b.txt不应该在那里。我错过了什么?

感谢您的帮助。

答案1

在您的第一个命令中,a/aa/***会匹配aa/以及之后的任何内容,但没有匹配a/,因此不会复制任何内容。

在第二个命令中,a/***匹配a/以及之后的任何内容,因此您复制的不仅仅是a/aa/内容。

例如,这应该足够了:

rsync -avh --include='/a/' --include='/a/aa/***' --exclude='*' from/ to/

man rsyncINCLUDE/EXCLUDE PATTERN RULES

相关内容