2

我的目录加载了数千个子目录:

/home/tmp/
          1
          12
          123
          1234
          2345
          234
          3456
          345
          34

每个子目录依次有数百个子目录,如果第一级子目录匹配,我想 rsync ......

我需要的是一种仅复制/rsync 以给定数字 [1-9] 开头的目录的方法...

我想我想要的基本上是可以让我使用通配符来匹配的东西

rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/

我希望 rsync 同步

/home/tmp/1/
/home/tmp/12/
/home/tmp/123/
/home/tmp/1234/

目录和他们拥有的任何子子目录,但不是任何以不同数字开头的第一级目录...

/home/tmp/234/
/home/tmp/2345/
........./3*/
........./4*/ etc..

我试过的:

rsync -rzvvhP --exclude='*' --include-from=1.txt remotehost:/home/tmp/ /home/tmp/

其中 1.txt 包含:

1
12
123
1234

当我使用 2.txt 执行此操作时,尽管 rsync 似乎仍然遍历所有以 1 和 3 等开头的目录...

我刚试过:

rsync -rzvvhP --include-from=2.txt remoteaccount@remotehost:/home/tmp/ /home/tmp/
first I get....
[sender] showing directory 2758 because of pattern 2758

......这看起来不错,但后来我得到......

1014/135954/T33-2.JPG is uptodate
1014/135956/456309.jpg is uptodate

......这很糟糕

根据我尝试的建议:

rsync -rzvvhP --size-only --filter='+ /2*/ - /*' remoteuser@remotehost:/home/tmp/ /home/tmp/ 

当它运行时,我得到的第一件事是一堆“最新”的文件,这些文件不应该是这个 rsync 的一部分:

1001/149984/T3201-2.JPG is uptodate

我怎样才能做到这一点,以便我可以使用一个命令来仅同步以任何给定数字开头的目录?

4

2 回答 2

2

创建过滤器文件,如下所示:

/my/dir/include.txt

+ /1*/
+ /3*/

# Skip everything else
- /*

现在将其添加到 rsync

rsync -rzvvhP \
    --filter='merge /my/dir/include.txt' \
    remotehost:/home/tmp/ /home/tmp/
于 2013-02-01T22:00:19.857 回答
0

我很确定我错过了什么,因为你说

我想我想要的基本上是可以让我使用通配符来匹配的东西

rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/

但这只是简单的工作。

让我们看看远程主机上有什么。

$ ssh remotehost find /tmp/a -type f
/tmp/a/123/x/a
/tmp/a/123/x/c
/tmp/a/123/y/b
/tmp/a/12/x/a
/tmp/a/12/x/c
/tmp/a/12/y/b
/tmp/a/1/x/a
/tmp/a/1/x/c
/tmp/a/1/y/b
/tmp/a/23456/x/a
/tmp/a/23456/x/c
/tmp/a/23456/y/b
/tmp/a/234/x/a
/tmp/a/234/x/c
/tmp/a/234/y/b
/tmp/a/34567/x/a
/tmp/a/34567/x/c
/tmp/a/34567/y/b
/tmp/a/3456/x/a
/tmp/a/3456/x/c
/tmp/a/3456/y/b
/tmp/a/345/x/a
/tmp/a/345/x/c
/tmp/a/345/y/b
/tmp/a/34/x/a
/tmp/a/34/x/c
/tmp/a/34/y/b
/tmp/a/3/x/a
/tmp/a/3/x/c
/tmp/a/3/y/b

现在 rsync 仅以 2 开头的目录。根据您的 shell,您可能需要引用通配符,就像我在这里所做的那样,或者不需要这样做。在 bash 下,这应该是不必要的。

$ rsync -rzvvhP 'remotehost:/tmp/a/2*' .
opening connection using: ssh remotehost rsync --server --sender -vvrze.iLsf . "/tmp/a/2*"
receiving incremental file list
delta-transmission enabled
234/
234/x/
234/x/a
       8 100%    7.81kB/s    0:00:00 (xfer#1, to-check=7/12)
234/x/c
       8 100%    7.81kB/s    0:00:00 (xfer#2, to-check=6/12)
234/y/
234/y/b
       8 100%    7.81kB/s    0:00:00 (xfer#3, to-check=5/12)
23456/
23456/x/
23456/x/a
       8 100%    7.81kB/s    0:00:00 (xfer#4, to-check=2/12)
23456/x/c
       8 100%    7.81kB/s    0:00:00 (xfer#5, to-check=1/12)
23456/y/
23456/y/b
       8 100%    7.81kB/s    0:00:00 (xfer#6, to-check=0/12)
total: matches=0  hash_hits=0  false_alarms=0 data=48

sent 149 bytes  received 533 bytes  454.67 bytes/sec
total size is 48  speedup is 0.07
于 2013-02-22T09:21:27.023 回答