rsync包含拒绝工作的规则

时间:2016-04-05 00:11:02

标签: include rsync rules

我对此进行了彻底的研究。一切应该"工作"对我来说没有,所以我想我会在这里问。

我有一个看起来像的目录树:

root/
   CK1E/
      3DConformers/
      OtherStuff/
   PDE4B/
      3DConformers/
      OtherStuff/
   ...

我正在尝试使用rsync命令来检索" 3DConformers"每个项目的子目录。

我正在发出以下形式的命令:

rsync -avz user@host:/path/to/root/ . --exclude "*" --include-from rules -v -v

我无法获得一般规则,所以我决定使用特定的规则,专注于" CK1E"子目录。我阅读了关于rsync是否需要/需要前导或尾随斜杠的相互矛盾的报告,所以我采用了霰弹枪的方法。我当前的规则文件如下所示:


    /CK1E
    /CK1E/
    /CK1E/3DConformers
    /CK1E/3DConformers/
    /CK1E/3DConformers/*
    CK1E
    CK1E/
    CK1E/3DConformers
    CK1E/3DConformers/
    CK1E/3DConformers/*

我从rsync获得以下输出。注意" CK1E"目录仍然被忽略!


    receiving incremental file list
    [sender] add_rule(- *)
    [sender] add_rule(+ /CK1E)
    [sender] add_rule(+ /CK1E/)
    [sender] add_rule(+ /CK1E/3DConformers)
    [sender] add_rule(+ /CK1E/3DConformers/)
    [sender] add_rule(+ /CK1E/3DConformers/*)
    [sender] add_rule(+ CK1E)
    [sender] add_rule(+ CK1E/)
    [sender] add_rule(+ CK1E/3DConformers)
    [sender] add_rule(+ CK1E/3DConformers/)
    [sender] add_rule(+ CK1E/3DConformers/*)
    server_sender starting pid=2451269
    [sender] make_file(.,*,0)
    recv_file_name(.)
    ...
    [sender] hiding directory CK1E because of pattern *
    ...
    received 1 names
    recv_file_list done
    send_file_list done
    get_local_name count=1 .
    generator starting pid=27883
    delta-transmission enabled
    recv_generator(.,0)
    recv_generator(.,1)
    generate_files phase=1
    recv_files(1) starting
    send_files starting
    send_files(0, /path/to/root/.)
    recv_files(.)
    send_files phase=1
    recv_files phase=1
    generate_files phase=2
    send_files phase=2
    recv_files phase=2
    send files finished
    total: matches=0  hash_hits=0  false_alarms=0 data=0
    recv_files finished
    generate_files phase=3
    generate_files finished

    sent 212 bytes  received 1578 bytes  275.38 bytes/sec
    total size is 0  speedup is 0.00
    _exit_cleanup(code=0, file=main.c, line=1505): about to call exit(0)

帮助?!

1 个答案:

答案 0 :(得分:0)

包含/排除规则的排序很重要:匹配文件的第一个包含/排除规则是重要的。

您的第一条规则是--exclude="*",因此您排除所有内容。您需要重新排序规则,以便在全部排除规则之前,您的包含规则与匹配。

此命令应该有效:

rsync -avz user@host:/path/to/root/ . \
      --include "/CK1E/" \
      --include "/CK1E/3DConformers/" \
      --include "/CK1E/3DConformers/*" \
      --exclude "*"

您需要添加中间目录以及文件,因为如果您没有明确提及它们,则catch-all排除规则将匹配它们,如果直接排除,那么内容。

\不是命令的一部分;它们只是表示行继续;当你剪切和粘贴时,你的shell会做正确的事。)