Відповіді:
Причина, по якій ваша команда не працює, пояснюється на сторінці керівництва для rsync (наголос додано):
- видалити
Це повідомляє rsync видаляти сторонні файли з приймальної сторони (ті, які не перебувають на стороні надсилання), але лише для каталогів, які синхронізуються. Ви, мабуть, попросили rsync надіслати весь каталог (наприклад, "dir" або "dir /"), не використовуючи підстановку для вмісту каталогу (напр., "Dir / *"), оскільки wildcard розширюється оболонкою, і rsync таким чином отримує запит на передачу окремих файлів, а не батьківського каталогу файлів. Файли, які виключаються з передачі, також виключаються з видалення, якщо ви не скористаєтесь опцією --delete-виключено або позначте правила лише як відповідні на стороні відправки (див. Розділ включення / виключення модифікаторів у розділі ПРАВИЛА ФІЛЬТРА).
Таким чином, коли ти біжиш
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
непотрібні файли в DEST не видаляються, оскільки ви насправді не просили синхронізувати каталог, а лише для кількох певних файлів. Щоб отримати бажані результати, спробуйте щось подібне:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
Зауважте, що порядок включення та виключення директив має значення. По суті, кожен файл перевіряється на зразок включення або виключення шаблонів у тому порядку, в якому вони з'являються. Таким чином, файли з розширеннями .jpg або .txt синхронізуються, оскільки вони відповідають "включеним" шаблонам, перш ніж вони співпадають із виключеним шаблоном "*". Все інше виключається за --exclude '*'
схемою. Ця --delete-excluded
опція гарантує, що навіть виключені файли на стороні DEST видаляються.
--delete-excluded
. Без цього лише *.jpg
та *.txt
може бути видалено на стороні призначення. З ним також будуть видалені непов'язані файли. Вас може зацікавити цей підручник про фільтри rsync .