将文件复制到 bash 中包含相同目录结构的另一个目录

Copy files to another directory containing the same directory structure in bash

我的目录结构如下:

dir1
+-- _class1
|   +-- _i
|   +-- _ii
|   +-- _iii
|   +-- _...
+-- _class2
|   +-- _i
|   +-- _ii
|   +-- _iii
|   +-- _...
+-- _class3
|   +-- _i
|   +-- _ii
|   +-- _iii
|   +-- _...
+-- _...

每个 class 包含完全相同的目录,并且这些目录包含 png 个文件。

我想要做的是将内容从 dir1 复制到 dir2,这样 dir2 具有以下格式:

dir2
+-- _i
|
+-- _ii
|
+-- _iii
|
+-- _...

例如:dir2/i/*.png 应包含 dir1/class1/i/*.pngdir1/class2/i/*.pngdir1/class3/i/*.png 等中的所有文件...

我已尝试执行以下操作:

for dir in dir1/*/; do 
    cp -r dir1 dir2; 
done

但我得到的是以下结构:

dir2
+-- _i
|
+-- _ii
|
+-- _iii
|
+-- _...
|
+-- _class2
|   +-- _i
|   +-- _ii
|   +-- _iii
|   +-- _...
+-- _class3
|   +-- _i
|   +-- _ii
|   +-- _iii
|   +-- _...
+-- _...
|   +-- _i
|   +-- _ii
|   +-- _iii
|   +-- _...

它似乎只适用于第一个目录,然后继续创建其他目录,而不是将它们复制到已经存在的目录结构中。

在 bash 中执行此操作的最佳方法是什么?

通配符需要另一个级别来匹配 iii 等目录。

for dir in dir1/*/*/; do
    cp -R "$dir" dir2
done

只需使用:

cp -R dir1/*/*/ dir2/

我认为您不需要使用 shell 迭代模式。 cp命令可以做到。