Como copiar arquivos recursivamente como links físicos para o diretório preservando a hierarquia de diretórios?

Como copiar arquivos recursivamente como links físicos para o diretório preservando a hierarquia de diretórios?

Estou tentando vincular arquivos em uma hierarquia de diretórios a outro diretório. O código fica assim:

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

A vinculação física é muito lenta devido às chamadas sequenciais para ln. Não consigo pensar em um formulário que funcione e não consigo encontrar muito sobre copiar como hardlinks cpe rsyncpáginas de manual. Inclinando-se para escrever um programa C para o problema específico...

Antes de entrar na toca do coelho, há alguma sugestão de como torná-lo mais rápido usando UNIX ou ferramentas de terceiros renomadas?

Responder1

GNUcpsuporta hard-linking em vez de copiar arquivos:

cp -lR src_dir dest_dir

Se dest_dirjá existir, isso será copiado src_dirpara dest_dir, você terá dest_dir/src_dircópias de todos os diretórios em src_dir.

Se você quiser apenas um subconjunto de src_dir, poderá copiar subdiretórios explicitamente:

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

informação relacionada