Как синхронизировать файлы и каталоги с помощью Zaloha.sh
Zaloha.sh — это синхронизатор каталогов, отличающийся небольшим размером и простотой. На самом деле это BASH-скрипт. Он состоит всего из одного файла Zaloha.sh, размер которого составляет 125 КБ. Примерно половина этого файла — документация, другая половина — программный код. Zaloha.sh работает «из коробки». Однако, как сценарий оболочки, его легко настроить для создания возможных нестандартных решений. Используя Zaloha, мы можем легко синхронизировать файлы и каталоги в Linux, Unix и Microsoft Windows.
Обратите внимание, что Zaloha.sh не так многофункциональен, как конкурирующие решения для резервного копирования, но эти конкурирующие решения также больше, сложнее и похожи на черный ящик. Для своей работы Zaloha.sh использует только стандартные команды Unix, такие как find, sort, awk, mkdir, rmdir, cp и rm. Zaloha.sh хорошо работает в Linux, Unix и Windows (конечно, требуется Cygwin).
Установите синхронизатор каталогов Zaloha.sh.
Установка Zaloha тривиальна. Просто загрузите файл Zaloha.sh из репозитория GitHub и переместите его в свой путь `, например /usr/local/bin/.
Git клонирует репозиторий Zaloha и переместит файл Zaloha.sh в путь ` с помощью команд:
git clone https://github.com/Fitus/Zaloha.sh.git
sudo mv Zaloha.sh/Zaloha.sh /usr/local/bin/zaloha.sh
Наконец, сделайте его исполняемым:
sudo chmod +x /usr/local/bin/zaloha.sh
В Windows загрузите сценарий в подходящий локальный каталог. Я решил поместить его в каталог C:\TOOLS.
В Windows в качестве дополнительного шага необходимо установить CygWin. У меня уже установлен CygWin на моем ноутбуке. Если вы еще не установили CygWin, обратитесь к официальным инструкциям по установке.
Синхронизируйте файлы и каталоги в Linux с помощью Zaloha.sh
Типичное использование Zaloha.sh выглядит следующим образом.
zaloha.sh --sourceDir=<path_to_dir> --backupDir=<path_to_dir>
Позвольте мне показать вам простой пример.
Я собираюсь создать два каталога, а именно test1 и test 2.
mkdir test1 test2
У меня есть два текстовых файла с именами file1 и file2 в каталоге test1.
ls test1/
file1 file2
И каталог test2 пуст.
Теперь я собираюсь синхронизировать каталоги test1 и test2 с помощью Zaloha:
zaloha.sh --sourceDir=test1/ --backupDir=test2/ --color
Нажмите y, чтобы продолжить.
Пример вывода:
ANALYZING ./test1/ AND ./test2/
===========================================
Parsing .............................................. done.
find ./test2/.Zaloha_metadata/ -path ./test2/.Zaloha_metadata/999_mark_executed -printf '///\tL\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
find ./test1/ -path ./test1/.Zaloha_metadata -prune -o -ipath './test1/$RECYCLE.BIN' -prune -o -path './test1/.Trash-[0-9]*' -prune -o -path ./test1/lost+found -prune -o -printf '///\tS\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
find ./test2/ -path ./test2/.Zaloha_metadata -prune -o -ipath './test2/$RECYCLE.BIN' -prune -o -path './test2/.Trash-[0-9]*' -prune -o -path ./test2/lost+found -prune -o -printf '///\tB\t%y\t%s\t%Ts\t%F\t%D\t%i\t%n\t%u\t%g\t%m\t%P\t///\t%l\t///\n'
Cleaning ............................................. done.
Checking ............................................. done.
Sorting (2) .......................................... done.
Differences processing ...............................
Zaloha AWK: Warning: No last run of Zaloha found (this is OK if this is the first run)
done.
Sorting (3) .......................................... done.
Post-processing and splitting off Exec1 and Exec4 .... done.
Sorting (4) and selecting Exec2 ...................... done.
Preparing shellscript for Exec1 ...................... done.
Preparing shellscript for Exec2 ...................... done.
Preparing shellscript for Exec4 ...................... done.
Preparing shellscript to touch file 999 .............. done.
Preparing shellscripts for case of restore ........... done.
TO BE COPIED TO ./test2/
===========================================
NEW file1
NEW file2
Execute above listed copies to ./test2/ ? [Y/y=Yes, other=do nothing and abort]: y
cp --preserve=timestamps ./test1/file1 ./test2/file1
cp --preserve=timestamps ./test1/file2 ./test2/file2
TO BE REMOVED FROM ./test2/
===========================================
Как видно из приведенного выше вывода, Zaloha использует стандартные команды Unix — find, awk, sort и cp. >.
Давайте проверим, синхронизировались файлы или нет.
$ ls test1
file1 file2
$ ls test2
file1 file2
Ну, это работает!!
Синхронизация с USB-накопителем
Следующие шаги были протестированы на компьютере с Windows 10, однако процедура одинакова для всех операционных систем.
Все мои рабочие файлы на ноутбуке сосредоточены в структуре каталогов C:\WORK_DATA. В настоящее время он содержит несколько тысяч файлов различных типов.
Я регулярно делаю резервную копию этого каталога на (довольно старом) USB-накопителе емкостью 2 ГБ. Когда я подключаю этот USB-накопитель к ноутбуку, он отображается как диск G. Каталог резервной копии на USB-накопителе — G:\WORK_BACKUP.
Итак, теперь собственно тест:
Недавно я был на встрече с клиентом и создал на его основе документ Word Meeting_Notes_0109.docx. Я также внес изменения в предложение для этого клиента, которое представляет собой таблицу Excel offer_01.xlsx.
Таким образом, ожидается, что Zaloha.sh выполнит резервное копирование этих двух файлов, оставив остальные файлы нетронутыми.
Давайте запустим Zaloha.sh и посмотрим:
/c/TOOLS/Zaloha.sh --sourceDir="/c/WORK_DATA" --backupDir="/cygdrive/g/WORK_BACKUP" --color
Пример вывода:
Видно, что Zaloha.sh запускает поиск Unix в обоих каталогах C:\WORK_DATA (в CygWin /c/WORK_DATA) и G:\WORK_BACKUP (в CygWin /cygdrive/g/WORK_BACKUP), затем выполняет несколько этапов обработки и, наконец, он представляет то, что собирается сделать, запрашивая подтверждение.
Файл Meeting_Notes_0109.docx помечен как НОВЫЙ (черный цвет), а файл Offer_01.xlsx помечен как ОБНОВЛЕНИЕ (красный цвет). Красный цвет тега UPDATE предупреждает пользователя о том, что эта операция требует большего внимания, поскольку старые данные в каталоге резервной копии будут перезаписаны.
После подтверждения запроса знаком «y» Zaloha.sh выполняет представленные операции.
Если мы теперь из любопытства еще раз запустим приведенную выше команду, то увидим, что Zaloha.sh выполняет этапы анализа, а затем ничего не делает, так как каталоги уже синхронизированы.
Обратная синхронизация
Давайте теперь проверим еще одну функцию Zaloha.sh — "обратную синхронизацию".
Предположим, мне по какой-то причине пришлось работать непосредственно с USB-накопителем, и я хочу, чтобы моя работа была обратно синхронизирована с ноутбуком.
Эту функцию необходимо явно включить с помощью параметров --revNew и --revUp.
Опция --revNew указывает Zaloha.sh скопировать в исходный каталог (ноутбук) файлы в каталоге резервной копии (на USB-накопителе), которые существуют только в каталоге резервной копии и являются более новыми, чем последний запуск Zaloha.sh.
Опция --revUp указывает Zaloha.sh скопировать в исходный каталог (ноутбук) файлы в каталоге резервной копии (на USB-накопителе), которые существуют в обоих местах, а более новые файлы находятся в каталоге резервной копии.
Давайте теперь проверим это. Я перехожу на USB-накопитель (например, G:\WORK_BACKUP\IKT\2020) и создаю там новый документ Word с именем Meeting_Notes_0113.docx. Затем я открываю Excel в файле offer_01.xlsx, вношу некоторые изменения и сохраняю его.
Теперь давайте запустим Zaloha.sh, используя следующую командную строку:
/c/TOOLS/Zaloha.sh --sourceDir="/c/WORK_DATA" --backupDir="/cygdrive/g/WORK_BACKUP" --color --revNew --revUp
Видно, что Zaloha.sh действительно выполнил обратную синхронизацию Meeting_Notes_0113.docx и Offer_01.xlsx обратно в записную книжку. Тег REV.UP файла Offer_01.xlsx снова отображается красным цветом, предупреждая пользователя о том, что данные будут перезаписаны.
Дополнительные возможности
Что следует отметить далее: Обнаружение файлов, нуждающихся в синхронизации, основано на времени изменения файлов и размерах файлов, что является обычным методом, используемым многими инструментами синхронизации. Однако Zaloha.sh также может выполнять побайтовое сравнение. Это можно активировать с помощью параметра командной строки.
В файловых системах, поддерживающих жесткие ссылки, Zaloha.sh может дедуплицировать жесткие ссылки и копировать файл с жесткой ссылкой только один раз в каталог резервной копии. Опять же, это можно активировать с помощью параметра командной строки.
Zaloha.sh содержит несколько других опций для изменения его функций. Все описано в документации. В документации также отведено приличное количество текста описанию внутренней работы Zaloha.sh. Здесь следует упомянуть один важный момент: Zaloha.sh создает рабочий каталог .Zaloha_metadata в каталоге резервного копирования, где он хранит свои временные файлы и файлы метаданных.
Рекомендуем прочитать:
- Как синхронизировать локальные и удаленные каталоги в Linux
Заключение
Заставить Zaloha.sh работать действительно легко, особенно в Linux. Благодаря своей простой настройке, поскольку Zaloha.sh является сценарием оболочки, он может принести дополнительную пользу в нескольких мыслимых ситуациях. Для получения более подробной информации обратитесь к репозиторию Zaloha GitHub, указанному ниже. Репозиторий, помимо самого Zaloha.sh, содержит простой демо-тест, скриншот и онлайн-документацию. Онлайн-документация такая же, как документация Zaloha.sh, но онлайн-версия имеет формат HTML и лучше.
Надеюсь это поможет.
Ресурс:
- Репозиторий Zaloha.sh на GitHub