Estou fazendo uma transferência de dados, o antigo sistema de arquivos depende profundamente de um diretório que agora está em um caminho diferente. Este é um diretório git que armazena código online. Não tenho direitos para movê-lo ou renomeá-lo.

Então, o que posso fazer é sincronizar novamente esse diretório com o mesmo caminho antigo. Mas o nome do diretório também mudou.

Existe uma maneira fácil de sincronizar novamente um diretório para um diretório de destino com um nome diferente?

Responder1

Se você quiser usar rsyncpara tornar o destdiretório recursivamente uma cópia exata do srcdiretório:

rsync -a src/ dest

A rsyncpágina do manual explica como isso funciona:

Uma barra final na origem [...] evita a criação de um nível de diretório adicional no destino. Você pode pensar no final /de uma fonte como significando "copiar o conteúdo deste diretório" em vez de "copiar o diretório pelo nome" [...]

Responder2

Responder3

Se os sistemas de arquivos antigo e novo estiverem acessíveis em sua máquina, considere usar um link simbólico em vez de rsync. Se o comando rsync que você está usando não especifica hosts (ou se eles são o mesmo host), então este é o caso. Você está tentando espelhar dois diretórios com nomes diferentes no mesmo host. Não use o rsync para isso, pois você está duplicando os dados e terá que executar o rsync com frequência para mantê-los sincronizados.

Usar um link simbólico é uma solução única que espelhará dois diretórios (com nomes diferentes) e quase não requer espaço. É como criar um diretório de alias que aponta para outro diretório.

Digamos que você tivesse o git antigo em um diretório chamado /old/path/old_git e agora o repositório de código foi movido para /new/path/new_git

Você pode fazer:

cd /old/path
rm -rf old_git     (if you still have it there, get rid of it, or move it out of the way)  
ln -s /new/path/new_git old_git

Isso criará um link como tal:

/old/path/old_git -> /new/path/new_git

Para que tudo o que for colocado em new_git também esteja disponível instantaneamente da maneira antiga, sem duplicar dados e sem precisar sincronizá-los constantemente.

Responder4

Encontro uma solução alternativa agora.

Usar rysnc -r /origin/* /target/pode sincronizar todo o conteúdo do diretório de origem para o diretório de destino.

informação relacionada