rsync --backup-dir não está obtendo dados alterados - em vez disso, ele vai para o local de backup original

rsync --backup-dir não está obtendo dados alterados - em vez disso, ele vai para o local de backup original

Não sei por que isso não está funcionando conforme o esperado. Eu tenho um backup rsync completo de /scripts/source em /scripts/full e quero colocar backup diferencial em /scripts/diff No entanto, quando um arquivo é adicionado ao local de origem de /scripts/source e um backup diferencial é executado , o backup dos arquivos é feito em /scripts/full em vez de /scripts/diff. Aqui está um script de teste que fiz:

DIFF='/scripts/diff'
SOURCE='/scripts/source'
FULL='/scripts/full'
CTIME=$(date +%T)
TESTFILE=newfile$CTIME
rm -r $DIFF/*
rm $SOURCE/newfile*
rm $FULL/newfile*
echo "I'm in a file " >  $SOURCE/$TESTFILE
rsync \
-a \
-A \
-X \
-h \
-H \
-b \
--backup-dir=$DIFF \
$SOURCE/* \
$FULL
echo "----------------------------------------------------------------------"
echo "Our test file is: $TESTFILE"
echo "----------------------------------------------------------------------"
echo "Source Files in $SOURCE - we should see our one test file"
ls $SOURCE
echo "----------------------------------------------------------------------"
echo "Full backup in past - We should not see any test files here"
ls $FULL
echo "----------------------------------------------------------------------"
echo "Diff files in $DIFF  - we should see the same test file here as"
echo "was in the $SOURCE dir"
ls $DIFF

No script, o arquivo de teste é colocado no diretório de origem. O rsync não deve copiar o diretório completo (mas o faz). Deve ser copiado para o diretório diff (não é).

Reler as páginas de manual e pesquisar na web não ajudou. Esquemas simples de backup diferencial, quando adaptados ao meu ambiente, simplesmente não funcionam. O que estou fazendo de errado aqui? Quero fazer um backup completo de vez em quando. Então, quero executar diferenças subsequentes que contenham apenas os arquivos alterados (enquanto o backup completo nunca muda). A ideia é que haja um backup completo para referência e os arquivos alterados possam ser encontrados no diff. Meu script é mais complexo que isso, mas simplifiquei para isolar o problema. Obrigado, -Jeff

Responder1

Suponho que as opções -b --backup-dirnão funcionam como você espera.
Você pode tentar usar uma opção diferente --link-dest. Sua linha de comando deve ser semelhante à seguinte

rsync -aAXhH --link-dest=/scripts/full/  /scripts/source/  /scripts/diff/

Qual é o significado?
Você está dizendo para rsynccomparar os arquivos /scripts/source/(os novos) com os que estão /scripts/diff/(que estão vazios)e no diretório adicional /scripts/full/(Esse é o do seu backup).

Notas:

  • Geralmente é melhor proteger a variável com aspas duplas "". TESTFILE="newfile${CTIME}"Então é melhorTESTFILE=newfile$CTIME
  • Do homemrsync:

    --link-dest=DIR         hardlink to files in DIR when unchanged
    
  • As opções --backup-dir(...) provavelmente são usadas para fazer uma cópia do arquivo geralmente com uma extensão diferente ou em um diretório diferente, em vez de sobrescrever o arquivo no diretório de destino.

    -b, --backup                make backups (see --suffix & --backup-dir)
        --backup-dir=DIR        make backups into hierarchy based in DIR
        --suffix=SUFFIX         backup suffix (default ~ w/o --backup-dir)
    
  • Sim, eles deveriam sermenos nebuloso...

informação relacionada