rsync copia arquivos do diretório de trabalho além dos solicitados

1

O seguinte é um recorte de saída de bash -vx no meu script de backup

\+ rsync '' -avushi --stats --progress --log-file=/home/bigbird/temp/rlog/rlog1.txt /media/dataspace/data/webcasts/ /media/work/data/webcasts

enviando lista de arquivos incremental

Estou fazendo rsync s assim para sempre e acabei de ver esse problema o último mês ou dois. Este aqui está rodando no Kubuntu Oneiric, mas eu acho que eu também já vi isso no Kubuntu Lucid.

O script está sendo executado em /home/bigbird/bin

Funciona perfeitamente, exceto que, além disso, transfere todos os arquivos do meu diretório atual para o destino. Eu também tenho um segundo rsync mais tarde no script que faz a mesma coisa para outro diretório.

Acabei de executá-lo novamente em outro diretório e copiei todos arquivos em vez disso.

Eu não vejo um "." na fonte em qualquer lugar etc.

Eu fiz um set | less

Olhei para todos os meus arquivos ~/bin

Olhei para todos os meus aliases

Eu não tenho a menor idéia do que estaria causando isso.

Onde procuro o problema?

    
por Joe 13.03.2012 / 22:10

2 respostas

1

O código original era

DRYRUN="-n"
DRYRUN=""
...

rsync "${DRYRUN}" -avushi --stats --progress --log-file="${LOGFILE}"
 /media/dataspace/data/webcasts/ "${MOUNT}${DESTDIR}"

Código de trabalho é

DRYRUN=1      ## for testing rsync without any file transfers
DRYRUN=0    ## for live run
...
if (( ${DRYRUN} ))
then
  rsync -n -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"
else
  rsync    -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"
fi

"Nós encontramos o inimigo e ele somos nós!" - Walt Kelly (tira em quadrinhos Pogo)

Eu encontrei! Invisível não significa que não esteja lá.

Eu não entendo muito bem o que aconteceu, mas, colocando "$ {DRYRUN}" na linha de comando rsync, ele fez o primeiro argumento para rsync "". Aparentemente isso tem interpretado como PWD em vez de um erro. Então o comando foi transferência "" e minha fonte real para o meu destino real porque o rsync aceita múltiplos fontes.

A pergunta restante é por que o rsync acha que "" significa o diretório atual em vez de interpretá-lo como um erro de sintaxe?

    
por Joe 16.03.2012 / 08:25
1

Seu caso é tão simples que você pode simplesmente remover as aspas da variável:

rsync $DRYRUN -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"

Mas você pode precisar das aspas em outro caso, por exemplo, se o parâmetro for um caminho contendo espaços, que podem ou não estar definidos. Então, aqui está uma solução mais elegante:

linkdest="<OLD_BACKUP_PATH>"
rsync ${linkdest:+--linkdest="$linkdest"} -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"

Se $ linkdest estiver vazio, nada será inserido. Se $ linkdest não estiver vazio, --linkdest="$ linkdest" será inserido (e será avaliado como um comando e não como uma string).

    
por Hyacinthe Cartiaux 20.08.2014 / 11:03