O seguinte funciona como desejado:
rsync --delete-after -uavh --progress /home/usr/test1/cool-beans /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/pineapple /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/pizza /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/dragons /home/usr/test2/elephant/
No entanto, quando simplifiquei para isso:
rsync --delete-after -uavh --progress \
/home/usr/test1/cool-beans /home/usr/test2/ \
/home/usr/test1/pineapple /home/usr/test2/ \
/home/usr/test1/pizza /home/usr/test2/ \
/home/usr/test1/dragons /home/usr/test2/elephant/
Eu recebo um erro. Em vez de colocar apenas a pasta 'dragons' dentro de 'elephant' como desejado, ele coloca todos os 'cool-beans', 'pineapple', 'pizza' e 'dragons' dentro de 'elephant', o que não é desejado. Como posso escrevê-lo de maneira simplificada (sem a repetição do primeiro exemplo) enquanto obtenho a mesma saída? Obrigado!
Você não pode ter vários destinos em um único
rsync
comando. O que aconteceu quando você tentou a versão "simplificada" é que todos os caminhos, exceto o último, foram tratados como fontes das quais copiar dados, portanto, você copiou não apenas de , , mas tambémcool-beans
depineapple
sipizza
mesmodragons
(test2
repetidamente). A--dry-run
opção é realmente útil ao tentar algo pela primeira vez.Seu conjunto pode ser simplificado em duas chamadas. Ou na íntegra:
ou usando uma função para encapsular os elementos comuns:
Se você puder garantir que a maioria dos caminhos comece com um componente fixo, poderá simplificar ainda mais o uso visível da chamada de função, fornecendo um caminho comum - que já deve existir - como primeiro argumento:
e depois chamando:
ou:
Você não pode.
rsync
pode aceitar várias origens, mas apenas um destino. rsync deve ser chamado várias vezes.Você poderia, no entanto, colocar o rsync e a parte de opções idênticas em uma variável e chamá-la: