想象一下像这样的文件结构:
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
答案 0 :(得分:0)
事实证明答案很简单。只需添加--prune-empty-dirs
标志即可。
rsync -avz --include=*/ --include='*/0/*.txt' --exclude=* --prune-empty-dirs test1/ test2/
这就是我想要的。