1

Написал сценарий оболочки, чтобы помочь мне в развертывании веб-сайта. В конце концов все складывается, как предполагалось, но команда rsync отказывается работать.

rsync --chmod="ug+rwx" -e="ssh" --filter="merge '/.deploy/filters'" --dry-run "/var/www/vhosts/staging/myhost.com/httpdocs/" "me@myhost.com:/var/www/vhosts/myhost.com/domains/myhost.com/httpdocs"

дает:
rsync: failed to open exclude file '/.deploy/filters': No such file or directory (2)

Изменение полного пути к файлу фильтра (относительно root) не решает проблему; изменяется только путь в сообщенной ошибке:

--filter="merge /.deploy/filters"  

дает:
invalid modifier sequence at 'd' in filter rule: .deploy

Очень расстраивает и обескураживает. Пожалуйста, кто-нибудь может объяснить?

ОБНОВИТЬ

Думал, мне нужно немного прояснить ситуацию. Использование --filter="merge 'path'" без одинарных кавычек всегда приводит к ошибке invalid modifier sequence .

--filter="merge '/relative/to/rsync/root/path'"

не дает такой ошибки no such file or directory , а также использование

--filter="merge '/relative/to/rsync/root/path'"

а также

--filter="merge '/absolute/path'"

а также

--filter="merge 'relative/path'"

1 ответ1

1

Вот что происходило ...

При использовании с одинарными кавычками они интерпретировались буквально как часть имени файла (как предложено @reinierpost). При использовании без, файл .deploy/filters читался и анализировался. Однако этот файл содержал 1 строку (которую я не упомянул в исходном описании):

.deploy

Именно на это правило жаловался rsync , а не на исходный путь к файлу фильтра.

Таким образом, подтверждается, что правильным способом является использование значения модификатора аргументов filter без одинарных кавычек.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .