training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как синхронизировать папки rsync BASH

Создано: 29 ноября 2017Автор: Егор Астапов2234 просмотраСложность: легкий

Добрались руки до rsync. Довольно большими возможностями обладает утилита rsync. Я просмотрел интересную статью: Rsync Примеры синхронизации и решил попробовать написать свой скрипт sh для синхронизации данных в двух разных папках. Кто-то скажет что скрипт в одну строку не скрипт, но часто короткие и простые решения на sh заменяют массу скриптов на PHP и ему подобных языков программирования. Допустим у вас есть некий шаблон для приложений и вы хотите его размножить. Можно копировать файлы при помощи команды cp. О команде cp читайте на странице как скопировать папку cp BASH. Если у вас мало файлов, то можно воспользоваться командой cp, но что делать если файлов много и они весят сотни мегабайт. Тут поможет утилита rsync. Рсинг заменяет только изменённую часть файла. Он может рекурсивно проникать в папки и синхронизировать содержимое. При копировании файлов можно включить сжатие файлов. Это хорошо помогает при синхронизации с удалённым сервером.

Посмотрите на пример. Создайте 2 папки: dir1, dir2. В папке dir1 создайте несколько файлов touch file{1..5}.txt. После синхронизации папка dir2 получит содержимое папки dir1. Одним словом, появится вторая зеркальная копия дерева файлов.


./dir1:
|_test
   |_config  f1.txt  file2.txt  file3.txt  file4.txt  file5.txt

./dir2:
|_test

Покажу вам простейшую схему того, как работает как работает rsync: rsync опции источник приемник. В опциях указывают ключи. В источниках и приёмниках помещают папки или файлы.

Опции rsync

  1. -v — Выводить подробную информацию о процессе копирования
  2. -q — Минимум информации
  3. -c — Проверка контрольных сумм для файлов
  4. -a — Режим архивирования
  5. -r — относительные пути
  6. -b — создание резервной копии
  7. -u — не перезаписывать более новые файлы
  8. -l — копировать символьные ссылки
  9. -L — копировать содержимое ссылок
  10. -H — копировать жесткие ссылки
  11. -p — сохранять права для файлов
  12. -g — сохранять группу
  13. -t — сохранять время модификации
  14. -x — работать только в этой файловой системе
  15. -e — использовать другой транспорт
  16. -z — сжимать файлы перед передачей
  17. --delete — удалять файлы которых нет в источнике
  18. --exclude — исключить файлы по шаблону
  19. --recursive — перебирать директории рекурсивно
  20. --no-recursive — отключить рекурсию
  21. --progress — выводить прогресс передачи файла
  22. --stat — показать статистику передачи
  23. --version — версия утилиты

Если вы никогда не работали с rsync, то поработайте в тесовом режиме. Ключ --remove-source-files позволит утилите rsync удалить все файлы сразу после выполнения синхронизации. Используйте этот ключ осторожно. Ключ --delete удаляет файлы которых нет в папке-источнике. Это очень удобно! Вы можете сделать зеркальные копии содержимого папок.

Примеры rsync


#тестовая работа, показано удаление файлов после работы rsync
rsync --dry-run --remove-source-files -zvr /.../rsync/dir1/* /.../rsync/dir2/

#удаление файлов во время синхронизации
rsync -zvr --delete /.../rsync/dir1/* /.../rsync/dir2/

Очень часто в различных языках программирования применяют файл config с настройками. Заменять конфиг новым файлом нельзя. На каждой папке свой уникальный конфиг. Ключ --exclude 'config' позволяет исключать файл из синхронизации.


#при синхронизации не учитывается файл config
rsync -zvr --delete --exclude 'config' /.../rsync/dir1/* /.../rsync/dir2/

Возможно кто-то попробует синхронизировать данные при помощи git. Скажу что такой вариант возможен, но есть одна проблема - размер папки .git увеличится в разы. Рсинг справится с этой задачей быстрее. Во время работы он меньше потребляет ресурсов. Вы можете ограничить скорость передачи данных при помощи ключа --bwlimit


#--bwlimit=100 ограничивает пропускную способность 
#при копировании бэкапа в 100 Кбайт в сек.
rsync -zvr --delete --exclude 'config' --bwlimit=100 /.../rsync/dir1/* /.../rsync/dir2/

Комментарии

реклама