我想使用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
答案 0 :(得分:3)
rsync --include="*/mainfolder/myfolder2/*" --exclude="*/mainfolder/*"
指令--include="*/mainfolder/myfolder2/*"
告诉rsync
将文件包含在目录*/mainfolder/myfolder2/
下。您可能认为它应该隐式告诉它包含目录*/mainfolder/myfolder2/
但它不包含。{1}}。它只包含该目录下的文件。
指令--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/*"