rsync仅复制特定子文件夹中的特定文件,而不创建空文件夹

时间:2014-10-08 14:27:16

标签: rsync

想象一下像这样的文件结构:

test
├── a
│   ├── 0
│   │   ├── file0.rtf
│   │   ├── file0.txt
│   │   ├── file1.rtf
│   │   ├── file1.txt
│   │   ├── file2.rtf
│   │   └── file2.txt
│   ├── 1
│   │   ├── file0.rtf
│   │   ├── file0.txt
│   │   ├── file1.rtf
│   │   ├── file1.txt
│   │   ├── file2.rtf
│   │   └── file2.txt
│   ├── 2
│   │   ├── file0.rtf
│   │   ├── file0.txt
│   │   ├── file1.rtf
│   │   ├── file1.txt
│   │   ├── file2.rtf
│   │   └── file2.txt
│   └── 3
│       ├── file0.rtf
│       ├── file0.txt
│       ├── file1.rtf
│       ├── file1.txt
│       ├── file2.rtf
│       └── file2.txt
└── b
    ├── 0
    │   ├── file0.rtf
    │   ├── file0.txt
    │   ├── file1.rtf
    │   ├── file1.txt
    │   ├── file2.rtf
    │   └── file2.txt
    ├── 1
    │   ├── file0.rtf
    │   ├── file0.txt
    │   ├── file1.rtf
    │   ├── file1.txt
    │   ├── file2.rtf
    │   └── file2.txt
    ├── 2
    │   ├── file0.rtf
    │   ├── file0.txt
    │   ├── file1.rtf
    │   ├── file1.txt
    │   ├── file2.rtf
    │   └── file2.txt
    └── 3
        ├── file0.rtf
        ├── file0.txt
        ├── file1.rtf
        ├── file1.txt
        ├── file2.rtf
        └── file2.txt

我在哪里不知道 ab的真实姓名。不过,我想复制*.txta的子文件夹中的所有b文件(如果它们已命名),如果它们位于子文件夹0中。

如果我使用

,它会起作用
rsync -avz --include=*/ --include='*/0/*.txt' --exclude=* test/ test2/

但是,rsync会创建空文件夹123,我希望避免这种情况。我该怎么做?

上面rsync命令的输出:

sending incremental file list
a/
a/0/
a/0/file0.txt
a/0/file1.txt
a/0/file2.txt
a/1/
a/2/
a/3/
b/
b/0/
b/0/file0.txt
b/0/file1.txt
b/0/file2.txt
b/1/
b/2/
b/3/

我想要

sending incremental file list
a/
a/0/
a/0/file0.txt
a/0/file1.txt
a/0/file2.txt
b/
b/0/
b/0/file0.txt
b/0/file1.txt
b/0/file2.txt

1 个答案:

答案 0 :(得分:0)

事实证明答案很简单。只需添加--prune-empty-dirs标志即可。

rsync -avz --include=*/ --include='*/0/*.txt' --exclude=* --prune-empty-dirs test1/ test2/

这就是我想要的。