Rsync

為什麼 rsync 不包含嵌套目錄?

  • June 27, 2020

給定以下目錄結構:

$ 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)

我是如何偶然發現它的:我正在嘗試同步多個可變嵌套目錄,同時保留整體目錄結構。

為什麼更具體的包含規則無法匹配任何內容?

第一個例子

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

引用自:https://unix.stackexchange.com/questions/595411