Você precisa criar a linha de comando de duplicidade usando uma matriz em vez de uma concatenação de cadeia simples. Em seguida, você pode usar a sintaxe "${array[@]}"
para fornecer o conteúdo da matriz à duplicidade como argumentos individuais (possivelmente contendo espaço). Isso tira você do negócio de ter que pensar em fugir de espaços ou outros caracteres incomuns.
Para ver como isso funciona sem realmente chamar a duplicidade, você pode usar um script simples que imprime seus argumentos em linhas separadas, como esta:
#!/bin/bash
printf "BEGIN\n"
for x in "$@"
do
printf "ARG: $x\n"
done
printf "END\n"
Eu salvei isso como args.sh
.
Agora, precisamos criar um comando usando uma matriz, assim:
#!/bin/bash
if test -z "$1"
then
printf "Need at least one argument"
exit 1
fi
prefix=$1
shift
for arg in "$@"
do
args+=("--exclude")
args+=("$prefix/$arg")
done
./args.sh "${args[@]}"
Em ação, isso funciona da seguinte maneira:
$ ./801811.sh foo bar "baz quux"
BEGIN
ARG: --exclude
ARG: foo/bar
ARG: --exclude
ARG: foo/baz quux
END
Você precisará fazer mais para configurar sua linha de comando de duplicidade, já que também precisa considerar $STUFF
e $DESTINATION
, mas eles podem ser tratados da mesma maneira, adicionando elementos à matriz args com args+=("whatever")
, antes ou depois de adicionar as exclusões, conforme apropriado. Então, no final, basta ligar para duplicity "${args[@]}"
.