Estou tentando usar o rysnc para fazer backup incremental de vários níveis, mas estou tendo alguns problemas. Parece que o rsync não reconhece curingas no compare-dest. Eu executo o seguinte código
rsync -av /home/j/test/source/ --compare-dest=/home/j/test/destination/*/ /home/j/test/destination/00/
Isso me dará a seguinte mensagem.
--compare-dest arg does not exist: /home/j/test/destination/*
Eu me deparo com esse problema mesmo depois de tentar executar o código novamente e colocar meu backup em um novo diretório
rsync -av /home/j/test/source/ --compare-dest=/home/j/test/destination/*/ /home/j/test/destination/01/
Na segunda tentativa, ele copiará tudo da pasta de origem para o destino/01/ em vez de procurar alterações em todos os diretórios do diretório de destino, como seria de esperar com um curinga.
A intenção é ser capaz de criar continuamente novos diretórios dentro do diretório de destino para que esses novos diretórios executem backup incremental da origem enquanto comparam todos os backups anteriores. Não tenho certeza de como fazer com que os curingas funcionem com --compare-dest, vi outras pessoas usá-los com o rsync para fazer algo muito semelhante.
Estou executando o Ubuntu em WSL2 e tentei o mesmo em meu servidor executando o Ubuntu 22.04. Alguma orientação sobre isso seria muito apreciada.
Obrigado,
J.
Aqui está o que está acontecendo:
rsync
mesmo de serem executadas. No entanto, neste caso, o que o shell vê é a string--compare-dest=/home/j/test/destination/*/
e, como não corresponde a um caminho de diretório, permanece inalterado.rsync
comando agora é executado e após analisar seus argumentos acabacompare-dest
tendo um caminho de diretório contendo um asterisco. É importante observar que neste ponto o asterisco é um caractere literal e é isso quersync
tentamos usar. (Conceitualmente, substitua*
por uma palavra comoSTAR
.)rsync
comando não consegue encontrar um caminho de diretório correspondente que contenha um asterisco literal como nome de diretório (ou seja, "/home/j/test/destination/*
") e falha com o erro que você vê.Se você puder garantir que haverá apenas um diretório correspondente ao caminho,
/home/j/test/destination/*/
você pode repetir orsync
comando, mas sem=
:Semanticamente, isso é a mesma coisa, mas desta vez o shell analisa
/home/j/test/destination/*/
e tenta expandir o curinga em um ou mais diretórios correspondentes.Porém, duas notas realmente importantes:
*
será deixado como um caractere literal e você receberá um erro do `rsync novamente.rsync
causando o caos resultante. ISSO SERIA RUIM .Se você não puder garantir que haja apenas uma correspondência, poderá usar o
{…}
padrão de expansão de chaves com um curinga , que repetirá--compare-dest=/path/…
quantas vezes forem necessárias para o conjunto de diretórios que correspondem ao caminho do curinga. Por exemplo:É quase certo que haverá soluções melhores para o seu cenário específico, mas sem saber mais detalhes é impossível recomendar uma solução ideal.