Сравнение и синхронизация
Когда вы храните две копии одной и той же папки — рабочую папку и резервную копию, ноутбук и сетевой ресурс, проект и его архив — Peach Commander помогает точно увидеть, что изменилось, и снова привести обе стороны в соответствие. Вы можете синхронизировать два каталога, сравнивать отдельные файлы построчно и проверять файлы побайтово, когда нужна уверенность вплоть до последнего символа.
Синхронизация двух каталогов¶
- Откройте папку, которую хотите синхронизировать, в левой панели, а папку для сравнения — в правой панели.
- Выберите Команды ▸ Синхронизировать каталоги…. Пути обеих папок подставляются из ваших панелей.
- Задайте, насколько тщательным должно быть сравнение: включить вложенные папки, сравнивать по содержимому (а не только по дате и размеру) или игнорировать дату изменения.
- Добавьте маску фильтра (например,
*.jpg;*.png), если хотите синхронизировать только определённые файлы. - Просмотрите таблицу результатов. Каждая строка показывает файл слева, стрелку направления посередине и соответствующий файл справа. Стрелки говорят, что произойдёт: → копирует слева направо, ← копирует справа налево, а = означает, что оба идентичны.
- Измените отдельные строки, если вы не согласны с предложенным направлением, затем нажмите кнопку синхронизации, чтобы выполнить изменения.
(Рис.: Окно «Синхронизировать каталоги» сравнивает обе стороны и предлагает направление копирования для каждого файла.)
Щёлкните строку правой кнопкой мыши, чтобы посмотреть на файлы за ней. Сравнить открывает обе стороны рядом, а Показать левый файл и Показать правый файл открывают одну сторону отдельно в просмотрщике — это и есть ответ для строки, которая существует только на одной стороне, где сравнивать нечего. Пункты, неприменимые к выбранной строке, недоступны, а не бездействуют. Файл внутри .zip или на сервере сначала распаковывается или загружается во временную копию только для чтения, поэтому оригинал остаётся нетронутым. То же относится к Сравнить: папку можно сравнить с архивом или сервером — а кнопки переноса и сохранения для такой стороны остаются выключенными, ведь открыта там копия.
Сравнение двух файлов по содержимому¶
- Выберите по одному файлу в каждой панели (или два файла в одной панели).
- Выберите Файл ▸ Сравнить по содержимому….
- Два файла открываются рядом с подсвеченными различиями. Используйте элементы управления «следующий/предыдущий» для перехода между изменёнными блоками.
- Если включить режим редактирования, вы можете изменять любой файл напрямую и сохранять свои изменения.
(Рис.: Сравнение двух текстовых файлов; изменённые строки подсвечены с обеих сторон.)
Если между файлами нет никаких различий, окно говорит об этом цветной полосой сверху, а не оставляет вас делать вывод из таблицы, в которой ничего не выделено. Полоса появляется и предупреждающим цветом, когда какой-то файл не удалось прочитать вовсе, — тогда любой вывод о различиях был бы утверждением о сравнении, которого не было. Побайтовое сравнение говорит то же самое по той же причине: два файла, которые оно не может открыть, — это не два одинаковых файла.
Сравнение файлов побайтово¶
Когда два файла выглядят одинаково, но нужно доказать, что они действительно идентичны (или найти тот единственный отличающийся байт), используйте двоичное сравнение. Оно показывает оба файла в шестнадцатеричном виде с отмеченными несовпадающими байтами, что идеально подходит для проверки загрузок, контроля закодированных данных или подтверждения точной копии.
Сравнение списков каталогов¶
Чтобы сразу заметить различия между двумя открытыми папками, выберите Выделение ▸ Сравнить каталоги (Shift+F2). Peach Commander отметит файлы, которые отличаются или отсутствуют на другой стороне, чтобы вы могли действовать с ними обычными командами копирования, перемещения и удаления.
Ограничение того, что входит в синхронизацию¶
Поле маски содержит один список включения по именам файлов. Для того, что им не выразить, кнопка Фильтр… рядом открывает лист с тремя вкладками. Заданное там действует на следующее сравнение, а кнопка затем сообщает, сколько критериев активно: фильтр, которого не видно, — это способ, которым резервная копия оказывается неполной, пока окно сообщает, что закончило.
- Исключить принимает шаблоны, разделённые
;или|. Имя без косой черты совпадает на любой глубине (*.tmp), косая черта в конце означает папку со всем её содержимым (node_modules/), а шаблон с косой чертой совпадает с относительным путём (src/*/generated). Регистр не учитывается. - Размер и дата судят пару целиком: если одна из сторон выходит за границы, исключается вся пара. Так задумано. Применённое лишь к одной стороне, исключение сделало бы пару односторонней и превратилось бы в копирование в неверном направлении.
- За последние N дней отсчитывается от каждого сравнения, а не от сохранения набора: сохранённое задание по-прежнему означает «последний месяц».
- Вкладка Плагины спрашивает плагин содержимого о той стороне, с которой файл был бы скопирован. Ему нужен настоящий файл, поэтому она предлагается только когда обе стороны — папки на этом Mac.
Исключённая папка не удаляется и в режиме зеркала: зеркало убирает только то, что действительно сравнило. Строка состояния сообщает, сколько записей задержал фильтр, рядом с тем, что сделает запуск. Фильтр сохраняется и загружается вместе с тем набором настроек синхронизации, которому принадлежит.
Держать две папки одинаковыми в обе стороны¶
Два исходных режима не различают одного: файл, который есть только на одной стороне, — это либо новый здесь, либо удалённый там, и выглядит это одинаково. Симметричный режим поэтому его копирует — удалите что-нибудь на ноутбуке, синхронизируйте, и оно вернётся из резервной копии, — а зеркальный удаляет, но только в одну сторону.
Двусторонне (с памятью) запоминает, как обе папки выглядели, когда совпадали в последний раз. С этой записью удаление на одной стороне можно перенести на другую.
- У первого запуска пары записи нет: он ведёт себя как прежде и ничего не удаляет. Он пишет запись. Со второго запуска режим работает.
- Перенесённое удаление показано своим цветом со знаком
⇒🗑и не отмечено: это единственная строка, которая приходит из памяти программы. Щелчок по стрелке предлагает остальные ответы: скопировать файл обратно или оставить обе стороны как есть. - Изменено на одной стороне и удалено на другой — это конфликт, никогда не удаление. Так же и файл, изменённый с обеих сторон.
- Ничего не удаляется на основании отсутствия, которое сравнение не смогло подтвердить — нечитаемая папка или задержанная фильтром ничего не доказывает о том, что внутри неё.
- Только две папки на этом Mac. Ни сервер, ни архив: удаление в архиве переписывает его, удаление на сервере необратимо, и этот режим не тот, на котором такое стоит пробовать.
Удаление отменить нельзя. На этом Mac файл попадает в Корзину и его можно вернуть из Finder; это вся страховка. Память… в окне перечисляет каждую пару, которую программа помнит, выделяет открытую и позволяет забыть любую — после чего следующее сравнение этих папок снова поведёт себя как первое. Само по себе ничего не забывается: папка на отключённом диске не исчезла, она лишь не подключена.
Запись лежит рядом с настройками: если переместить одну из папок, у пары больше нет истории — а запуск без истории ничего не удаляет.
Что сделал запуск и что из этого можно вернуть¶
Каждая синхронизация записывается. Запуски… в окне перечисляют их, начиная с новых — когда, какие две папки, какой режим и сколько файлов было скопировано, удалено или задержано — и показывают, что случилось с каждым файлом выбранного запуска.
Именно этот список делает Корзину пригодной. Файл, который удалил этот Mac, попал в Корзину, и запуск записал куда, что значит больше, чем кажется: Корзина при совпадении имён переименовывает, так что второй notes.txt оказывается там как notes.txt 11-17-15-028.txt, и поиск по имени находит не тот. Показать в Корзине наводит Finder прямо на объект.
Вернуть на место… переносит удалённые запуском файлы из Корзины по тем путям, откуда они были удалены. Каждый сперва проверяется, и то, что не сходится, отклоняется с указанием причины, а не продавливается:
- По этому пути снова что-то есть. Оно остаётся нетронутым — возврат никогда не вправе перезаписывать.
- Объекта больше нет в Корзине, либо он был удалён безвозвратно, а не отправлен туда.
- Сторона была архивом или сервером. Архив переписывается целиком, а у сервера Корзины нет, так что ничего не сохранилось.
- Папка, в которую писал запуск, исчезла или это уже не та же папка — например, повторно использованная точка монтирования. Тогда отклоняется весь запуск, а не выполняется его часть.
- Это уже вернули. Запись помнит об этом, поэтому вторая попытка ничего не делает.
- Либо сама запись такова, что эта версия с ней работать не может — её написала более новая версия программы, или она называет путь вне обеих папок. Редко, и отклоняется, а не угадывается.
Копию вернуть нельзя. Убрать её значило бы удалить файл, который вы могли с тех пор отредактировать, а это обратный размен по сравнению с возвратом удаления, поэтому программа этого не предлагает — запуск говорит, какие файлы он скопировал, и удалить их вы можете сами. Файл, который был перезаписан, — единственный настоящий пробел, и он теперь невелик: на этом Mac заменённая версия уходит в Корзину как удалённый файл, так что Показать в Корзине её найдёт. В архив, на сервер или на том без Корзины так не выйдет, и подтверждение говорит об этом до запуска.
Хранятся последние 200 запусков или 64 МБ из них — что наступит раньше; сверх того самые старые отпадают по одному по мере появления новых, а Забыть и Забыть все убирают их сразу. Очень большой запуск — более 20 000 файлов — сохраняет каждую проблему и всё, что он положил в Корзину, но не прошедшие копии, и говорит об этом, а не оставляет вам это заметить. Его удаления по-прежнему можно вернуть: пропущены были копии, а копию всё равно нельзя было бы вернуть.
Забывание ничего не меняет в папках; уходит запись о том, что было сделано, а вместе с ней и предложение что-либо вернуть. В отличие от двусторонней памяти это выбрасывается автоматически — потеря памяти о паре изменила бы то, что сделает следующий запуск, тогда как потеря записи о запуске лишь убирает предложение.
Сочетания клавиш¶
| Действие | Сочетание |
|---|---|
| Сравнить списки каталогов (отметить различающиеся файлы) | Shift+F2 |
| Сравнить по содержимому | Файл ▸ Сравнить по содержимому… |
| Синхронизировать каталоги | Команды ▸ Синхронизировать каталоги… |
| Показать одну сторону строки синхронизации | Правая кнопка на строке ▸ Показать левый файл / правый файл |
Примечания¶
- По содержимому и по дате/размеру. Быстрое сравнение сопоставляет файлы по размеру и дате изменения, что быстро, но может обмануть, когда временные метки идентичных файлов различаются. Включите по содержимому для надёжного результата ценой чтения каждого файла.
- Вложенные папки и фильтры. Окно синхронизации может заходить во вложенные папки и ограничиваться маской фильтра, поэтому вы можете синхронизировать только те типы файлов, которые вам нужны.
- Вы сохраняете контроль. Синхронизация никогда не выполняется сама по себе — вы просматриваете предложенные направления в таблице результатов и можете изменить любое из них, прежде чем что-либо будет скопировано. Esc останавливает идущее сравнение и закрывает окно, когда ничего не выполняется.
- Наборы настроек. Часто используемые конфигурации синхронизации можно сохранить и повторно использовать, чтобы не вводить одни и те же параметры каждый раз. Набор настроек запоминает и то, что показывает таблица результатов — фильтр направления и Скрыть одинаковые, — а окно открывается на наборе, использованном последним. Набор По умолчанию есть с первого открытия окна; сохраните поверх него, чтобы сделать его своим.