it-swarm-ru.tech

Удалить посторонние файлы из Dest Dir через Rsync?

Скажи у меня

SRC 
  001.jpg
  002.jpg
  001.txt
  a.Zip

DEST
  hello.jpg

rsync -d --delete SRC:{*.jpg,*.txt} DEST

Это не удаляет hello.jpg из DEST, есть идеи, как заархивировать это?

51
Cheng

Причина, по которой ваша команда не работает, объясняется страница справочника по rsync (выделение добавлено):

--удалять

Это говорит rsync об удалении посторонних файлов с принимающей стороны (тех, которые не на отправляющей стороне), но только для каталогов, которые синхронизируются. Вы должны были попросить rsync отправить весь каталог (например, "dir" или "dir /") без использования подстановочного знака для содержимого каталога (например, "dir/*"), поскольку подстановочный знак является расширяется оболочкой, и rsync получает запрос на передачу отдельных файлов, а не родительского каталога файлов. Файлы, исключенные из передачи, также исключаются из удаления, если вы не используете - опцию delete-exclude или помечать правила как совпадающие только на отправляющей стороне (см. модификаторы include/exclude в разделе FILTER RULES).

Таким образом, когда вы бежите

$ 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 будут удалены.

73
Steven D