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