O Rsync se comporta de maneira diferente se invocado dentro do script

2

Então, estou escrevendo um script de backup e queria pular arquivos .iso.

Se eu usar o comando na linha de comando, tudo funcionará bem:

rsync -a --delete --exclude='*.iso' /home/user/Desktop/Work /mnt/profile/Desktop/

Mas, quando tento usá-lo no meu script, ele não obtém as configurações de "EXCLUDE" e continua a copiar os arquivos .iso. Este é o script:

#!/bin/bash
set -e

SRC_DIR="/home/user/Desktop/Work"
DST_MOUNTPOINT="/mnt/profile"
DST_DIR="/mnt/profile/Desktop/"
OPTIONS=" --exclude='*.iso' "

mountpoint -q $DST_MOUNTPOINT || mount $DST_MOUNTPOINT

rsync -a --delete $OPTIONS $SRC_DIR $DST_DIR

Se eu executar o script, obter seu PID e verificar / proc / PID / cmdline, as configurações EXCLUDE estarão lá.

O que estou fazendo de errado?

    
por Delta 18.10.2016 / 12:27

1 resposta

3

Você está colocando aspas no padrão de exclusão.

OPTIONS=" --exclude='*.iso' "
rsync $OPTIONS

Aqui, OPTIONS contém <space>--exclude='*.iso'<space> . Como não é citado na linha de comando rsync , a divisão de palavras acontece, removendo os espaços nas extremidades. Mas as aspas simples na string permanecem e são passadas para rsync . O padrão não corresponde, pois você provavelmente não terá nomes de arquivo com aspas no início e no final.

Remova as aspas extras (e os espaços) e cite suas variáveis:

OPTIONS="--exclude=*.iso"
rsync "$OPTIONS" "$SRC_DIR" "$DST_DIR"
    
por 18.10.2016 / 12:41