我想使用rsync从服务器下载特定文件,这是目录的方案:
.
file1
fakeotherfolder
filefile
morefile
morefakefolder
file
file2
file3
mainfolder
myfolder1
folfile1
folfile2
myfolder2
folfile1
folfile2
myfolder3
folfile1
folfile2
myfolder4
folfile1
folfile2
基本上,我想获取所有不在
mainfolder/myfolder*
中的文件,例如特定的mainfolder/myfolder2
。最后我想要什么:
.
file1
fakefolder
filefile
morefile
morefakefolder
file
file2
file3
mainfolder
myfolder2
folfile1
folfile2
我尝试了rsync与以下选项:
rsync --include="*/mainfolder/myfolder2/*" --exclude="*/mainfolder/*"
,但是我得到的是一个空的主文件夹...
.
file1
fakefolder
filefile
morefile
morefakefolder
file
file2
file3
mainfolder
最佳答案
什么地方出了错
rsync --include="*/mainfolder/myfolder2/*" --exclude="*/mainfolder/*"
--include="*/mainfolder/myfolder2/*"
告诉rsync
将文件包括在*/mainfolder/myfolder2/
目录下。您可能认为它应该隐式告诉它包括目录*/mainfolder/myfolder2/
,但实际上不包含。它仅包括该目录下的文件。 --exclude="*/mainfolder/*"
告诉它排除*/mainfolder
下的所有文件和目录。这意味着它不包含*/mainfolder/myfolder2/
。由于不包含myfolder2,因此将永远不会检查其下的文件。 如何修复
解决方案是显式包括
mainfolder/myfolder2
:rsync --include="mainfolder/myfolder2" --include="mainfolder/myfolder2/*" --exclude="mainfolder/*" src/ dest
解决方案是显式包括
mainfolder/myfolder2
:请注意,
resync
解释按声明顺序包括/排除。因此,重要的是--include="mainfolder/myfolder2"
出现在--exclude="mainfolder/*"
之前。总之,我们需要三个指令,而exclude指令必须位于最后:--include="mainfolder/myfolder2"
--include="mainfolder/myfolder2/*"
--exclude="mainfolder/*"