Como posso copiar arquivos de vários subdiretórios para outro diretório preservando a estrutura de diretórios?

Como posso copiar arquivos de vários subdiretórios para outro diretório preservando a estrutura de diretórios?

Eu tenho um diretório contendo muitos subdiretórios semelhantes. Cada um desses subdiretórios contém alguns arquivos nos quais estou interessado e outros nos quais não estou.

Eu quero copiar:

DE: dois arquivos específicos: arquivo1.txt arquivo2.json de cada subdiretório

PARA: um local diferente

Mas criar os subdiretórios naquele local

Por exemplo se eu tiver

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
|

Quero copiar isso para outro local, mas excluindo "algumas outras coisas e pastas que não preciso"

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
|         

Como posso fazer isso no terminal bash?

Responder1

Você pode usar cpcom --parents:

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

Responder2

Existe algum padrão para os arquivos que você deseja copiar?

A partir do exemplo, se considerarmos "-file1.txt" e "file2.json" como os arquivos que você deseja copiar para a nova estrutura de diretórios, isso pode ser feito desta forma, devo pensar:

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

Espero que isso ajude.

informação relacionada