我想 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/
请注意,我们需要首先将工作目录更改为源目录,以便发送到目标的路径相对于当前目录。