cp comando que parcialmente resolve links simbólicos

3

Existe uma maneira fácil de copiar um diretório recursivamente onde links simbólicos para arquivos / diretórios externos são resolvidos (o arquivo de destino é copiado), mas links simbólicos internos (apontando para arquivos dentro da árvore copiada) são mantidos?

Exemplo:

touch outsidefile
mkdir src
ln -s ../outsidefile src/sym1
touch src/insidefile
ln -s insidefile src/sym2
cp [???] src dest # or other command

queria resultado:

$ ls dest
 insidefile
 sym1
 sym2 -> insidefile

i.e. sym1 é um arquivo normal, sym2 continua sendo um link simbólico.

    
por jofel 26.10.2015 / 16:57

1 resposta

5

rsync -a --copy-unsafe-links src/ dest

Da página man :

--copy-unsafe-links

This tells rsync to copy the referent of symbolic links that point outside the copied tree. Absolute symlinks are also treated like ordinary files, and so are any symlinks in the source path itself when --relative is used. This option has no additional effect if --copy-links was also specified.

[...]

--links --copy-unsafe-links Turn all unsafe symlinks into files and duplicate all safe symlinks.

    
por 26.10.2015 / 17:00