Как скопировать файлы из многих подкаталогов в другой каталог, сохранив при этом структуру каталогов?

Как скопировать файлы из многих подкаталогов в другой каталог, сохранив при этом структуру каталогов?

У меня есть каталог, содержащий много похожих подкаталогов. В каждом из этих подкаталогов есть файлы, которые мне интересны, и некоторые, которые мне не интересны.

Я хочу скопировать:

ИЗ: два конкретных файла: file1.txt file2.json из каждого подкаталога

КОМУ: другое место

Но создание подкаталогов в этом месте

Например, если у меня есть

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
|

Я хочу скопировать это в другое место, но исключив «некоторые другие вещи и папки, которые мне не нужны».

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
|         

Как это сделать из терминала bash?

решение1

Вы можете использовать cpс --parents:

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

решение2

Есть ли какая-то закономерность в файлах, которые вы хотите скопировать?

Из примера, если мы возьмем «-file1.txt» и «file2.json» в качестве файлов, которые вы хотите скопировать в новую структуру каталогов, то, как мне кажется, это можно сделать следующим образом:

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

Надеюсь, это поможет.

Связанный контент