rsync --include --exclude简单任务不起作用

时间:2014-10-11 01:15:20

标签: shell syntax ssh rsync patternsyntaxexception

我想使用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

1 个答案:

答案 0 :(得分:3)

出了什么问题

rsync --include="*/mainfolder/myfolder2/*" --exclude="*/mainfolder/*"
  1. 指令--include="*/mainfolder/myfolder2/*"告诉rsync将文件包含在目录*/mainfolder/myfolder2/下。您可能认为它应该隐式告诉它包含目录*/mainfolder/myfolder2/但它不包含。{1}}。它只包含该目录下的文件。

  2. 指令--exclude="*/mainfolder/*"告诉它排除*/mainfolder下的所有文件和目录。这意味着它排除了*/mainfolder/myfolder2/。由于myfolder2被排除在外,因此永远不会检查其下的文件。

  3. 如何解决

    解决方案是明确包含mainfolder/myfolder2

    rsync --include="mainfolder/myfolder2" --include="mainfolder/myfolder2/*" --exclude="mainfolder/*" src/ dest
    

    解决方案是明确包括mainfolder/myfolder2

    请注意,resync解释按照声明的顺序包含/排除。因此,--include="mainfolder/myfolder2"出现在--exclude="mainfolder/*"之前非常重要。总之,我们需要三个指令,而exclude指令必须是最后一个:

    1. --include="mainfolder/myfolder2"

    2. --include="mainfolder/myfolder2/*"

    3. --exclude="mainfolder/*"