为什么 rsync 不包含嵌套目录?

为什么 rsync 不包含嵌套目录?

给定以下目录结构:

$ 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
  • 排除一切(其他)

相关内容