目前,我正在努力寻找一种解决方案,仅包含子目录中的文件,但排除所有其他内容。文件结构看起来像这样
$ 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 rsync
到INCLUDE/EXCLUDE PATTERN RULES