【问题标题】:rsync --include --exclude simple task doesn't workrsync --include --exclude 简单任务不起作用
【发布时间】:2014-10-11 01:15:19
【问题描述】:

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

【问题讨论】:

  • unix.stackexchange.com 或 superuser.com 将是解决此类问题的更好地方。 SO 用于编程问题。

标签: shell syntax ssh rsync patternsyntaxexception


【解决方案1】:

出了什么问题

rsync --include="*/mainfolder/myfolder2/*" --exclude="*/mainfolder/*"
  1. 指令--include="*/mainfolder/myfolder2/*" 告诉rsync 包含目录*/mainfolder/myfolder2/ 下的文件。您可能认为它应该隐含地告诉它包含目录*/mainfolder/myfolder2/,但事实并非如此。它只包括该目录下的文件。

  2. 指令--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 指令需要放在最后:

  1. --include="mainfolder/myfolder2"

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

  3. --exclude="mainfolder/*"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2017-05-12
    • 2014-11-30
    • 1970-01-01
    相关资源
    最近更新 更多