¿Cómo copiar archivos de forma recursiva como enlaces físicos en un directorio preservando la jerarquía de directorios?

¿Cómo copiar archivos de forma recursiva como enlaces físicos en un directorio preservando la jerarquía de directorios?

Estoy intentando vincular archivos en una jerarquía de directorios a otro directorio. El código se ve así:

# 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/{} \;

El enlace físico es muy lento debido a las llamadas secuenciales a ln. Sin embargo, no puedo pensar en un formulario que funcione y no puedo encontrar mucho sobre copiar como enlaces físicos en cppáginas rsyncde manual. Inclinándose hacia escribir un programa en C para el problema específico...

Antes de saltar por esa madriguera del conejo, ¿hay alguna sugerencia sobre cómo hacerlo más rápido usando UNIX o herramientas de terceros reconocidas?

Respuesta1

ÑUcpadmite enlaces duros en lugar de copiar archivos:

cp -lR src_dir dest_dir

Si dest_dirya existe, esto se copiará src_diren dest_dir, terminará con dest_dir/src_dircopias de todos los directorios en src_dir.

Si solo desea un subconjunto de src_dir, puede copiar los subdirectorios explícitamente:

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

información relacionada