rsync исключить/включить/фильтр

Вопрос или проблема

Следующий сценарий:
У меня есть следующая структура папок на сервере 1:

/backup/dir1/bup
/backup/dir2/bup
/backup/dir3/bup
/backup/dir1/bak
/backup/dir1/bak
/backup/dir1/bak.

У меня есть структура папок на сервере 2:

/backup/dir3/bup
/backup/dir4/bup
/backup/dir5/bup
/backup/dir3/bpc
/backup/dir4/bpc
/backup/dir5/bpc

Только каталоги /backup/*/bup должны быть синхронизированы, но таким образом, чтобы /backup/dir4/bup и /backup/dir5/bup также исчезли через опцию --delete. Остальное должно остаться.

Я пытался работать с несколькими правилами фильтрации, но не могу продвинуться дальше. Также фильтры исключения/включения не работают, как нужно. Попытка по-прежнему приводит к удалению других каталогов на другой стороне.

rsync -amv \
      --delete \
      --filter=‘+ */’ --filter=‘+ */bup/**’ --filter=‘- *’ \
      /backup/ server2:/backup/

Ответ или решение

Использование rsync для синхронизации файлов между серверами является распространенной задачей, особенно когда необходимо точное управление тем, какие файлы и папки должны быть переданы. В вашем случае необходимо только синхронизировать папки /backup/*/bup между двумя серверами, при этом гарантируя, что папки /backup/dir4/bup и /backup/dir5/bup на сервере 2 удаляются, если они присутствуют, а другие папки не затрагиваются.

Теория

rsync — это утилита для Unix-подобных систем, которая позволяет синхронизировать файлы и каталоги между двумя местоположениями. Она поддерживает множество опций, которые позволяют нам точно определять, какие файлы должны быть синхронизированы, а какие — нет. В вашем случае использование фильтров --include и --exclude поможет добиться необходимой функциональности.

Флаги:

  • -a (archive) — копирует файлы и директории рекурсивно, сохраняя их атрибуты.
  • -m (prune-empty-dirs) — удаляет пустые каталоги с целевого местоположения.
  • -v (verbose) — выводит информацию о процессе копирования.
  • --delete — удаляет файлы и директории на целевом сервере, которые отсутствуют в источнике.

Фильтры:

  • --include — включает файлы и директории, которые должны быть синхронизированы.
  • --exclude — исключает файлы и директории из синхронизации.

Пример

Исходя из вашей попытки, очевидно, что вы уже понимаете, что нужно использовать фильтры. Но важно правильно их настроить:

Пример команды:

rsync -avm --delete \
      --include='*/' \
      --include='*/bup/' \
      --exclude='*' \
      /backup/ server2:/backup/

Объяснения:

  1. --include='*/' — позволяет обрабатывать все каталоги на пути к нужным подкаталогам.
  2. --include='*/bup/' — целенаправленно включает каталоги bup во всех подкаталогах.
  3. --exclude='*' — исключает все остальные файлы и каталоги.

Эта конфигурация гарантирует, что будут синхронизированы только каталоги bup, а все остальные будут проигнорированы.

Применение

Чтобы максимально эффективно использовать rsync в вашем случае:

  1. Понять структуру исходного и целевого каталогов — Используйте команду ls или tree, чтобы убедиться, что у вас есть точное представление о текущем содержимом обоих серверов.

  2. Тестовая синхронизация — Запустите rsync с флагом --dry-run. Это позволит увидеть, какие изменения будут внесены без фактического выполнения синхронизации:

    rsync -avm --dry-run --delete \
          --include='*/' \
          --include='*/bup/' \
          --exclude='*' \
          /backup/ server2:/backup/

    Анализируйте вывод этой команды, чтобы удостовериться, что требуемые операции будут выполнены.

  3. Реальная синхронизация — Если тестовый запуск прошел успешно, выполните rsync без флага --dry-run:

    rsync -avm --delete \
          --include='*/' \
          --include='*/bup/' \
          --exclude='*' \
          /backup/ server2:/backup/
  4. Проверка результатов — Оцените содержимое целевых каталогов на обоих серверах, чтобы убедиться, что синхронизация выполнена согласно требуемым критериям.

  5. Автоматизация процесса — Если такая задача повторяется регулярно, рассмотрите возможность автоматизации процесса с помощью скрипта bash или добавления команды в cron для выполнения задания по расписанию.

  6. Документирование изменений — Всегда сохраните конфигурацию и команды, которые вы использовали, так как это облегчит диагностику и обслуживание в будущем.

Этот процесс должен обеспечить синхронизацию только необходимых каталогов bup, удаление ненужных папок на сервере 2, в то время как остальные каталоги останутся нетронутыми.

Оцените материал
Добавить комментарий

Капча загружается...