Estou fazendo uma transferência de dados, o sistema de arquivos antigo 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 este diretório com o mesmo caminho antigo. Mas o nome do diretório também mudou.
Existe uma maneira fácil de sincronizar um diretório para um diretório de destino com um nome diferente?
src
diretório nodest
diretóriorsync
que eu já usei. Se isso realmente está acontecendo com você, você está perdendo a barra no final do argumento do diretório de origem.dest
for um symlnksrc
, mas acaba sendo copiadosrc
parasrc/src
. Testado no macOS. Estava esperando que eu poderia substituirbar -> foo/
combar/
, mas teve que usar um diretório temporário intermediário.dest
é um link simbólicosrc
, simplesmenterm dest
antes de executar o comando acima.rsync
é inteligente o suficiente para criardest
antes de copiar o conteúdo desrc
. Você não precisa de um diretório temporário intermediário.Se os sistemas de arquivos antigos e novos estiverem acessíveis à sua máquina, considere usar um link simbólico em vez de rsync. Se o comando rsync que você estiver usando não especificar hosts (ou se eles forem o mesmo host), esse é o caso. Você está tentando espelhar dois diretórios com um nome diferente no mesmo host. Não use o rsync para isso, pois você está duplicando os dados e precisará executar o rsync frequentemente para mantê-los sincronizados.
O uso de um link simbólico é uma correção única que espelha dois diretórios (com nomes diferentes) e quase não requer espaço. É como criar um diretório de alias que aponte para outro diretório.
Digamos que você tenha 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:
Isso criará um link como tal:
/ old / path / old_git -> / novo / caminho / new_git
Para que tudo o que for colocado no new_git também esteja instantaneamente disponível da maneira antiga, sem duplicar os dados e sem precisar sincronizá-los constantemente.
fonte
Eu acho uma solução alternativa agora.
O uso
rysnc -r /origin/* /target/
pode sincronizar todo o conteúdo do diretório de origem para o diretório de destino.fonte
rsync -r $(find /origin -maxdepth 1 -type f) /target/
. Como o @RayBurgemeestre apontou, a expansão do shell glob não incluirá arquivos de ponto.