ti-enxame.com

Copie o link simbólico E onde aponta para o uso de rsync

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.

11
Wei-Yin

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.

2
user201564

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 ...
...
0
xenoterracide