Видалити сторонні файли з dest dir через rsync?


51

Скажи, що я

SRC 
  001.jpg
  002.jpg
  001.txt
  a.zip

DEST
  hello.jpg

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

Це не видаляє hello.jpg з DEST, будь-яка ідея, як це архівувати?

Відповіді:


72

Причина, по якій ваша команда не працює, пояснюється на сторінці керівництва для 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 видаляються.


@Cheng, хочете пояснити трохи більше? Я буду радий оновити свою відповідь, якщо є проблема / покращення.
Стівен Д

Це працює. Я вважаю. Речі - процес мене бентежать, змушують думати, що це знову передано.
Чен

Я відредагував свою відповідь, щоб пояснити трохи більше.
Стівен Д

2
@ Чен: Я підозрюю, що ви цього не хочете --delete-excluded. Без цього лише *.jpgта *.txtможе бути видалено на стороні призначення. З ним також будуть видалені непов'язані файли. Вас може зацікавити цей підручник про фільтри rsync .
Жиль "ТАК - перестань бути злим"

3
Дякую! Для мене я не бракував косої косої риски у вихідному каталозі.
воган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.