
Estou usando o seguinte comando para fazer uma cópia recursiva completa do conteúdo de um diretório para outro:
rsync -avzhe /path1/to1/dir1/* /path2/to2/dir2/
Funciona como esperado, exceto que o primeiro arquivo (em ordem alfabética), seja um diretório ou arquivo, não é copiado. Todos os outros arquivos são copiados. Por que ?
Meu sistema operacional é MacOS 10.14.6, se isso for importante.
Responder1
A -e
opção precisa de um argumento, então leva o primeiro nome de arquivo para isso. Não sei por que você deseja, -e
pois ele define o comando a ser usado para conectar-se ao controle remoto, mas você não está usando um controle remoto. Basta remover o -e
.
Responder2
Para fazer uma cópia completa do diretório /path1/to1/dir1
chamado /path2/to2/dir2
, use
rsync -av /path2/to1/dir1/ /path2/to2/dir2
Não faz sentido usar compactação ( -z
) para uma cópia local. A -e
opção especifica o comando usado para estabelecer a conexão de rede (é por isso que seu comando falha ao copiar o primeiro arquivo; rsync
usa-o como argumento de opção para a -e
opção), portanto, isso também deve ser removido neste cenário.
Além disso, não use *
no final do caminho de origem, pois normalmente não corresponderia a nenhum nome oculto. Glovar todos os nomes dir1
também poderia expandir para uma lista muito longa para que o comando fosse executado.
Apenas certifique-se de que o caminho de origem termine com uma barra. Uma barra no final do caminho de destino não faz diferença. Remover a barra do caminho de origem copiaria dir1
dentro de dir2
. Uma barra no final do caminho de origem faz dir2
uma cópia do arquivo dir1
.
Fora isso, você pode usar -H
para garantir que os links físicos sejam estabelecidos corretamente no destino e --sparse
se você sabe que está copiando arquivos que podem ser esparsos (como imagens de disco pré-alocadas).
Use --delete
para tambémexcluirentradas do destino que não fazem parte da hierarquia do arquivo de origem. Use isso com cuidado. Você pode querer testar a execução com -n
( --dry-run
) primeiro.