给定以下目录结构:
$ cd /home/user/test/
$ mkdir -p source/b/c/
$ touch source/b/c/d.txt
$ tree source/
source/
└── [4.0K] b
└── [4.0K] c
└── [ 0] d.txt
为什么此命令按预期复制文件夹:
$ pwd
/home/user/test/
$ rsync -av -n --include="b/***" --exclude="*" source/ target
sending incremental file list
created directory target
./
b/
b/c/
b/c/d.txt
sent 141 bytes received 59 bytes 400.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
但这不行吗?
$ pwd
/home/user/test/
$ rsync -av -n --include="b/c/***" --exclude="*" source/ target
sending incremental file list
./
sent 59 bytes received 19 bytes 156.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
我是如何偶然发现它的:我试图同步多个可变嵌套目录,同时保留整体目录结构。
为什么更具体的包含规则无法匹配任何内容?
答案1
第一个例子
rsync -av -n --include="b/***" --exclude="*" source/ target
- 包括目录
b
及其下面的所有内容 - 排除一切(其他)
所以b
它的孩子们得到了备份
第二个例子
rsync -av -n --include="b/c/***" --exclude="*" source/ target
- 包括目录
b/c
和下面的所有内容c
- 排除一切(其他)
这里的问题是你没有包含b
所以rsync
永远找不到b/c
。解决方案是b
明确包括,
rsync -av -n --include='b/' --include="b/c/***" --exclude="*" source/ target
- 包含目录
b
- 包括目录
b/c
和下面的所有内容c
- 排除一切(其他)