rsync --exclude при использовании переменной bash

Мне нужно скопировать исходный каталог в каталог назначения с помощью rsync в bash, за исключением файлов с определенными расширениями (.qcow2). Он работает правильно, когда я пытаюсь ввести команду вручную, но не работает с переменной bash.

Я установил переменную bash, ниже ее содержимое:

# echo $line
/mnt/source --exclude='*.qcow2'

Несмотря на наличие параметра exclude, rsync копирует файл «.qcow2»:

# rsync -av $line destination/
sending incremental file list
source/Atlas/
source/Atlas/atlas.sh
source/Atlas/atlas.qcow2

sent 2143238309 bytes  received 56 bytes  115850722.43 bytes/sec
total size is 2143164594  speedup is 1.00

Пока работает rsync, я вижу процесс, как показано ниже:

# ps -ef | grep rsync
root     39058 11032 62 14:56 pts/22   00:00:01 rsync -av /mnt/source --exclude='*.qcow2' destination/
root     39059 39058  0 14:56 pts/22   00:00:00 rsync -av /mnt/source --exclude='*.qcow2' destination/
root     39060 39059 71 14:56 pts/22   00:00:02 rsync -av /mnt/source --exclude='*.qcow2' destination/
root     39066 14866  0 14:56 pts/24   00:00:00 grep rsync

Файл ".qcow2" скопирован выше, этого я хочу избежать.

Когда я запускаю ту же команду без переменной, как видно из вывода ps (после удаления файлов в целевом каталоге), она работает правильно, файл «.qcow2» не передается:

# rm -f destination/Atlas/*
# rsync -av /mnt/source --exclude='*.qcow2' destination/
sending incremental file list
source/Atlas/
source/Atlas/atlas.sh

sent 14956 bytes  received 37 bytes  29986.00 bytes/sec
total size is 202930  speedup is 13.53

Как я могу заставить его работать, чтобы избежать передачи файла «.qcow2» с использованием переменных в bash?

заранее спасибо


person Jim Raynor    schedule 14.03.2018    source источник
comment
Есть еще один повторяющийся вопрос о суперпользователе: заголовок ="почему расширения параметров bash приводят к тому, что команда rsync работает по-другому"> stackoverflow.com/questions/29527983/   -  person Gordon Davisson    schedule 14.03.2018


Ответы (1)


Цитата в вашей переменной отключена. Попробуй это:

$ line='/mnt/source --exclude=*.qcow2'
$ echo $line
/mnt/source --exclude=*.qcow2
$ rsync -av $line destination/
person L. Scott Johnson    schedule 14.03.2018
comment
@JimRaynor В некоторых ситуациях подстановочный знак без кавычек (*) может вызвать проблемы. Посмотрите повторяющиеся вопросы, чтобы узнать, как лучше это сделать (подсказка: используйте массив). - person Gordon Davisson; 15.03.2018