rsync
é uma ferramenta poderosa, mas, infelizmente, é estranhamente exigente em alguns de seus nomes de caminho.
Se $DATA
for um caminho absoluto (ou seja, começa com /
), a linha de comando correta a ser usada é:
rsync -a --link-dest=$DATA $DATA/ $DATA/../upgrade_tmp
[Agora, apenas um breve resumo sobre a estranheza de rsync
. Observe o /
à direita adicionado ao argumento de origem. Isso diz a rsync
para trabalhar com o conteúdo do diretório de origem, em vez de usar o próprio diretório de origem. (Eu estou supondo que $DATA
não contém um /
). Nesse caso, queremos trabalhar com o conteúdo, então adicionamos o /
.]
Se, por outro lado, $DATA
for um caminho relativo (isto é, ele não começa com /
), então o comentário de Sean R sobre --link-dest
está ativado: O caminho link-dest é interpretado como relativo para o caminho destino , assim você usaria o seguinte:
rsync -a --link-dest=../'basename $DATA' $DATA/ $DATA/../upgrade_tmp
EDITAR
Uma observação final é que a segunda linha de comando rsync
que eu dei deve funcionar independentemente de $DATA
ser um caminho absoluto, pois basename
não se importa se um caminho é absoluto ou relativo.