Não precisa ser feito por rsync
, mas seria bom não ter que escrever um script para fazer isso, e rsync
está muito perto do que eu quero.
rsync -a
(ou -l
) pode preservar links simbólicos e -L
pode cancelar a referência de links simbólicos e copiá-los como se fosse um arquivo/diretório normal. No entanto, é possível manter o link simbólico e também copiar os arquivos/diretórios para os quais os links apontam?
Aqui está um exemplo. Digamos que temos esta hierarquia de pastas:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others
e quando eu faço rsync -aR dirA dest
(ou outra coisa), gostaria que exatamente eles aparecessem em dest
:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2
Isso é possível com rsync
? Obrigado.
Vamos supor que links simbólicos com caminho absoluto ou apontando para fora do diretório de origem possam ser ignorados.
Se você sabe o nome do link simbólico e deseja transferir o link e o destino, você pode:
rsync -a 'symlink' .
realdir="$(basename "$(readlink -f 'symlink')")"
rsync -a "$realdir" .
O primeiro rsync
transfere apenas o symlink
. O segundo comando encontra o nome real do diretório e o segundo rsync
transfere o conteúdo do diretório.
Isso seria possível se e somente se você todos estes estivessem em 'mydir' e você fosse sincronizar 'mydir' de um lugar para outro. O Rsync não é capaz de copiar fora do caminho fornecido (com exceção dos links a seguir). por exemplo
mydir/dirA ...
mydir/dirB ...
...