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

Където не знам истинските имена на a и b. Въпреки това искам да копирам всички *.txt файлове от подпапки на a и b (както и да са именувани), ако са в подпапка 0.

Донякъде работи, ако използвам

rsync -avz --include=*/ --include='*/0/*.txt' --exclude=* test/ test2/

Rsync обаче създава празни папки 1, 2, 3, които бих искал да избегна. Как да направя това?

Изход от командата 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

person P.R.    schedule 08.10.2014    source източник


Отговори (1)


Оказва се, че отговорът е прост. Просто добавянето на флага --prune-empty-dirs върши работа.

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

Това исках.

person P.R.    schedule 09.10.2014