¿Cómo puedo copiar archivos de muchos subdirectorios a otro directorio manteniendo la estructura del directorio?

¿Cómo puedo copiar archivos de muchos subdirectorios a otro directorio manteniendo la estructura del directorio?

Tengo un directorio que contiene muchos subdirectorios similares. Cada uno de estos subdirectorios tiene algunos archivos que me interesan y otros que no.

quiero copiar:

DE: dos archivos particulares: file1.txt file2.json de cada subdirectorio

PARA: una ubicación diferente

Pero hacer los subdirectorios en esa ubicación

Por ejemplo si tengo

base
|_folder_00000001
|         |_-file1.txt
|         |_ file2.json
|         |_some_other_things_I_dont_need
|         |_some_other_folder_I_dont_need
|
|_folder_00000002
|         |_-file1.txt
|         |_ file2.json
|         |_some_other_things_I_dont_need
|         |_some_other_folder_I_dont_need
|
|_folder_00000003
|         |_-file1.txt
|         |_ file2.json
|         |_some_other_things_I_dont_need
|         |_some_other_folder_I_dont_need
|
|_folder_00000004
|         |_-file1.txt
|         |_ file2.json
|         |_some_other_things_I_dont_need
|         |_some_other_folder_I_dont_need
|

Quiero copiar esto a otra ubicación pero excluyendo "algunas otras cosas y carpetas que no necesito"

target
|_folder_00000001
|         |_-file1.txt
|         |_ file2.json
|         
|
|_folder_00000002
|         |_-file1.txt
|         |_ file2.json
|             |
|_folder_00000003
|         |_-file1.txt
|         |_ file2.json
|             |
|_folder_00000004
|         |_-file1.txt
|         |_ file2.json
|         

¿Cómo puedo hacer esto desde la terminal bash?

Respuesta1

Puedes usar cpcon --parents:

cd base
cp -v --parents */file1.txt */file2.json ../target/

Respuesta2

¿Existe algún patrón en los archivos que desea copiar?

En el ejemplo, si tomamos "-file1.txt" y "file2.json" como los archivos que desea copiar a la nueva estructura de directorios, se puede hacer de esta manera, debería pensar:

rsync -av --include="*/" --include="*-file1.txt" --include="*file2.json" --exclude="*" /src/dir/  /dest/dir/

Espero que eso ayude.

información relacionada