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 cp
e rsync
pá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
GNUcp
suporta hard-linking em vez de copiar arquivos:
cp -lR src_dir dest_dir
Se dest_dir
já existir, isso será copiado src_dir
para dest_dir
, você terá dest_dir/src_dir
có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