Ответы:
Причина, по которой ваша команда не работает, объясняется страницей справочника по rsync (выделение добавлено):
--удалять
Это говорит rsync об удалении посторонних файлов с принимающей стороны (тех, которые не на отправляющей стороне), но только для каталогов, которые синхронизируются. Вы, должно быть, попросили rsync отправить весь каталог (например, "dir" или "dir /") без использования подстановочного знака для содержимого каталога (например, "dir / *"), поскольку подстановочный знак раскрывается оболочкой, и, таким образом, rsync получает запрос на передачу отдельных файлов, а не родительский каталог файлов. Файлы, которые исключены из передачи, также исключаются из удаления, если вы не используете опцию --delete-exclude или не помечаете правила как совпадающие только на отправляющей стороне (см. Модификаторы include / exclude в разделе ПРАВИЛА ФИЛЬТРА).
Таким образом, когда вы бежите
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
ненужные файлы в DEST не удаляются, потому что вы на самом деле не просили каталог для синхронизации, а просто несколько определенных файлов. Чтобы получить желаемые результаты, попробуйте что-то вроде этого:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
Обратите внимание, что порядок директив include и exclude имеет значение. По сути, каждый файл проверяется на соответствие шаблонам включения или исключения в порядке их появления. Таким образом, файлы с расширениями .jpg или .txt синхронизируются, поскольку они соответствуют шаблонам «включенных» до того, как они соответствуют исключенному шаблону «*». Все остальное исключается по --exclude '*'
шаблону. В --delete-excluded
параметре гарантирует , что даже исключенные файлы на DEST стороны будут удалены.
--delete-excluded
. Без этого только *.jpg
и *.txt
могут быть удалены на стороне назначения. При этом несвязанные файлы будут также удалены. Вас может заинтересовать это руководство по фильтрам rsync .