Как рекурсивно скопировать файлы как жесткие ссылки в каталог, сохраняя иерархию каталогов?

Как рекурсивно скопировать файлы как жесткие ссылки в каталог, сохраняя иерархию каталогов?

Я пытаюсь жестко связать файлы в одной иерархии каталогов с другим каталогом. Код выглядит так:

# Directories first, works fine, takes sub-second
find src_dir/sub1 src_dir/sub2 -type d -exec bash -c 'cd "$0" && mkdir -p "$@"' dest_dir {} +
# Files next, works fine, takes several seconds
find src_dir/sub1 src_dir/sub2 -type f -exec ln -f {} dest_dir/{} \;

Жесткая ссылка очень медленная из-за последовательных вызовов ln. Я не могу придумать форму, которая работает, и не могу найти много информации о копировании-как-жестких ссылках в cpи rsyncman-страницах. Склоняюсь к написанию программы на C для конкретной проблемы...

Прежде чем прыгнуть в эту кроличью нору, есть ли какие-либо предложения, как ускорить процесс с помощью UNIX или других известных сторонних инструментов?

решение1

ГНУcpподдерживает жесткие ссылки вместо копирования файлов:

cp -lR src_dir dest_dir

Если dest_dirон уже существует, он скопирует его src_dirв dest_dir, в результате вы получите dest_dir/src_dirкопии всех каталогов в src_dir.

Если вам нужно только подмножество src_dir, вы можете явно скопировать подкаталоги:

mkdir -p dest_dir/src_dir
cp -lR src_dir/sub1 dest_dir/src_dir/sub1
cp -lR src_dir/sub2 dest_dir/src_dir/sub2

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