Files

rsync 只包含子目錄

  • May 14, 2022

目前,我正在努力尋找一種解決方案,僅在子目錄中包含文件但排除所有其他內容。文件結構如下所示

$ 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 不應該在那裡。我錯過了什麼?

謝謝你的幫助。

在您的第一個命令中,a/aa/***將匹配aa/以及之後的任何內容,但沒有匹配 for a/,因此不會複製任何內容。

在第二個命令中,a/***匹配a/和之後的任何內容,因此您複製的不僅僅是a/aa/內容。

例如,這應該足夠了:

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

man rsyncINCLUDE/EXCLUDE PATTERN RULES

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