Взгляните на rsync .Предполагая, что вы находитесь в '/',
rsync -r f/ g/ --include "*/" --include "*/file.txt" --exclude "*"
Первое включение необходимо, чтобы rsync заглянул внутрь подкаталогов (и противодействовал последнему исключению).Второе включение выбирает файлы, которые вы хотите скопировать.Исключение гарантирует, что другие файлы не будут обработаны в / f, которые не имеют требуемого шаблона.
Примечание: если у вас есть символические ссылки, rsync скопирует ссылку , а неукажите ссылку на файл, если вы не укажете --copy-links
.
Пример:
$ find f g -type f
f/f1/file.txt
f/f1/fileNew.txt
f/f2/file.txt
f/f3/file.txt
find: g: No such file or directory
$ rsync -r f/ g/ --include "*/" --include "*/file.txt" --exclude "*"
$ find f g -type f
f/f1/file.txt
f/f1/fileNew.txt
f/f2/file.txt
f/f3/file.txt
g/f1/file.txt
g/f2/file.txt
g/f3/file.txt