Вопрос или проблема
Следующий сценарий:
У меня есть следующая структура папок на сервере 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/
Объяснения:
--include='*/'
— позволяет обрабатывать все каталоги на пути к нужным подкаталогам.--include='*/bup/'
— целенаправленно включает каталогиbup
во всех подкаталогах.--exclude='*'
— исключает все остальные файлы и каталоги.
Эта конфигурация гарантирует, что будут синхронизированы только каталоги bup
, а все остальные будут проигнорированы.
Применение
Чтобы максимально эффективно использовать rsync
в вашем случае:
-
Понять структуру исходного и целевого каталогов — Используйте команду
ls
илиtree
, чтобы убедиться, что у вас есть точное представление о текущем содержимом обоих серверов. -
Тестовая синхронизация — Запустите
rsync
с флагом--dry-run
. Это позволит увидеть, какие изменения будут внесены без фактического выполнения синхронизации:rsync -avm --dry-run --delete \ --include='*/' \ --include='*/bup/' \ --exclude='*' \ /backup/ server2:/backup/
Анализируйте вывод этой команды, чтобы удостовериться, что требуемые операции будут выполнены.
-
Реальная синхронизация — Если тестовый запуск прошел успешно, выполните
rsync
без флага--dry-run
:rsync -avm --delete \ --include='*/' \ --include='*/bup/' \ --exclude='*' \ /backup/ server2:/backup/
-
Проверка результатов — Оцените содержимое целевых каталогов на обоих серверах, чтобы убедиться, что синхронизация выполнена согласно требуемым критериям.
-
Автоматизация процесса — Если такая задача повторяется регулярно, рассмотрите возможность автоматизации процесса с помощью скрипта bash или добавления команды в
cron
для выполнения задания по расписанию. -
Документирование изменений — Всегда сохраните конфигурацию и команды, которые вы использовали, так как это облегчит диагностику и обслуживание в будущем.
Этот процесс должен обеспечить синхронизацию только необходимых каталогов bup
, удаление ненужных папок на сервере 2, в то время как остальные каталоги останутся нетронутыми.