Rsync 过滤器(包含/排除)

Rsync 过滤器(包含/排除)

我想 rSync 一些文件/文件夹,但我的过滤器有问题。这就是我的源 FS 的样子:

.
|_ Invent/
|  |+ Comps/
|  |+ Prod/
|  |_ Other/
|_ Archive/
|  |_ Comps/
|  |_ Prod/
|  |_ Other/
|+ Comps.csv

正如您所注意到的,我想同步 2 个目录和 1 个文件。我还想保存目录和文件结构:

./Invent/Comps/*
./Invent/Prod/*
./Comps.csv

我尝试过以下命令:

rsync -avze "ssh -i key_file" 
    --include "Comps.csv" 
    --include "/Invent/Comp/*" 
    --include "/Invent/Prod/*" 
    --exclude "*" 
    /source/path/ rsync@srv:/target/path/

结果我得到了很多垃圾文件,甚至不是来自/source/path/。怎么了?

答案1

经过一番头脑风暴,我找到了正确的解决方案:

--exclude 'Archive' 
--include 'Invent/Comp/' 
--include 'Invent/Prod/' 
--exclude 'Invent/*'

答案2

当您不太确定需要复制或避免复制的文件或目录在哪里,或者当您有太多路径名无法在命令行上方便地列出时,通常需要使用包含和排除模式。

由于您确切知道要复制的路径,并且路径不是太多,因此我建议根本不要使用包含和包含模式,而只是列出路径并rsync使用-R(或者--relative):

cd /source/path || exit
rsync -av -R Invent/Comps/ Invent/Prod/ Comps.csv rsync@srv:/target/path/

请注意,我们需要首先将工作目录更改为源目录,以便发送到目标的路径相对于当前目录。

相关内容