Я пытаюсь жестко связать файлы в одной иерархии каталогов с другим каталогом. Код выглядит так:
# 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
и rsync
man-страницах. Склоняюсь к написанию программы на 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