Введение
Команда реставрации книг переносит Garden Atlas на новый стол. В источнике есть личные черновики и временные просмотры; у получателя уже есть заметка, которую нельзя потерять. Результат — пригодные коллекция и список стола, сначала для сегодняшнего издания, затем для обновлённого.
Нужны базовые навыки терминала. Эта независимая среда предоставляет обе локальные папки и снимок следующего издания. Вы изучите направление, завершающие косые черты, пробные запуски, фильтры и точные границы удаления, прежде чем применить эти идеи через SSH в следующей работе.
Отрепетируйте границы коллекции
На этом шаге вы скопируете книжную коллекцию в принимающий каталог после сравнения двух безопасных пробных запусков. Используйте Terminal на протяжении всей работы. SSH здесь не нужен.
Стол реставрации переносит Garden Atlas. В old/collection находятся тексты, скрытая конфигурация чтения и исполняемая программа. old/generated содержит одноразовые списки стола. old/personal — личный каталог. На новом столе уже есть receiver-note.txt, принадлежащий принимающей команде и обязательный после каждого обновления. В revision/ находится следующее издание для дальнейшего шага.
cd меняет каталог. ls -a включает скрытые записи, а cat читает текст, не изменяя его. Сначала просмотрите заметку принимающей команды:
cd /home/labex/project/folder-move
ls -a old/collection
cat new/receiver-note.txt
Заметка гласит Received by Mira. Keep the west shelf clear. Старый каталог на этом столе неполный. Назначение намеренно не пустое.
rsync копирует из первого пути во второй. -a означает архивный режим: рекурсивное копирование каталогов, сохранение времён модификации, прав исполнения и других поддерживаемых атрибутов. Обычная принимающая учётная запись не может сохранять произвольных исходных владельцев; курс проверяет байты и право исполнения, а не межсистемное владение, ACL или расширенные атрибуты. -n выполняет пробный запуск без изменения файлов. -i поэлементно перечисляет предполагаемые изменения.
Исключение в кавычках отбрасывает имена с окончанием .tmp на любой глубине; кавычки не дают оболочке развернуть шаблон до его получения rsync.
Сначала выполните пробный запуск для самого исходного каталога, без завершающей косой черты:
rsync -ani --exclude='*.tmp' old/collection new/collection/
Найдите предполагаемый дополнительный collection/ внутри целевой коллекции. Такая вложенность поместила бы программу чтения не туда.
Теперь выполните пробный запуск для содержимого источника с завершающей косой чертой:
rsync -ani --exclude='*.tmp' old/collection/ new/collection/
Теперь пути находятся прямо в new/collection/, включая .bindery.conf, read-book и texts/. Точечные файлы включены, потому что rsync получает сам каталог; шаблон оболочки вроде old/collection/* пропустил бы скрытые записи. Новые обычные файлы часто показывают >f+++++++++; другие флаги описывают изменения атрибутов. Строки пробного запуска — предложения, а не переданная коллекция.
Уберите только n, чтобы выполнить выбранную передачу:
rsync -ai --exclude='*.tmp' old/collection/ new/collection/
new/collection/read-book
Программа выводит reading_order=catalog,treatment, затем каталог Garden Atlas и обработку с бумажными шарнирами. Прямой запуск доказывает, что скопированная программа работает с относительными путями текстов и скрытой конфигурацией. При отказе исполнения проверьте режимы источника и назначения через ls -l, затем повторите архивный режим из подготовленного источника. Не заменяйте программу фиксированным выводом.
Если вы случайно выполнили вложенное копирование, проверьте ls new/collection/collection, прежде чем удалить только этот дубликат через rm -r new/collection/collection. rm -r безвозвратно удаляет указанный каталог и его содержимое. Никогда не сокращайте очистку до new, где находится и заметка получателя. Затем повторите правильную передачу.
Передайте список стола, не удаляя заметок
На этом шаге вы завершите первую передачу копированием отдельного сформированного списка. Оставайтесь в Terminal, в /home/labex/project/folder-move.
Коллекция и сформированные файлы имеют разные зоны ответственности. Источник управляет всеми файлами в generated/; получатель владеет своей корневой заметкой. Выберите только второй управляемый каталог вместо копирования всего old/, которое раскрыло бы и personal/.
rsync -ani old/generated/ new/generated/
rsync -ai old/generated/ new/generated/
cat new/generated/current.txt
cat new/receiver-note.txt
Список показывает Garden Atlas | desk edition 1. Устаревший список пока намеренно остаётся частью первого издания. Заметка получателя не изменилась. Снова запустите переданную программу чтения:
new/collection/read-book
--delete пока не требовался. По умолчанию rsync сохраняет файлы, существующие только у получателя. Исключение предотвращает передачу, но не удаляет уже находящийся там временный файл. Если вы ошибочно скопировали просмотр, исследуйте и удалите только точный лишний файл, например rm new/collection/preview.tmp, затем повторите фильтрованную синхронизацию. Никогда не очищайте корень приёма ради прохождения проверки.
Примените следующее издание в управляемой области
На этом шаге вы передадите второе издание и удалите только старый сформированный список. Оставайтесь в Terminal в том же рабочем каталоге.
cat принимает несколько имён файлов и выводит их в указанном порядке. Прочитайте предоставленное следующее издание до замены редактируемого источника:
cat revision/collection/texts/catalog.txt revision/collection/texts/treatment.txt revision/collection/texts/addendum.txt
В каталоге теперь 48 листов, обработка использует льняные шарниры и появилось дополнение. cp -a копирует рекурсивно с сохранением атрибутов. revision/. означает всё содержимое, включая скрытые файлы. Оно накладывает предоставленные изменения на old/, но не удаляет запись, отсутствующую в редакции. Стол явно выводит из использования old/generated/obsolete.txt, поэтому удалите только этот указанный исходный файл. rm удаляет файл навсегда; не расширяйте путь.
cp -a revision/. old/
rm old/generated/obsolete.txt
Обычно rsync определяет изменение данных по размеру и времени модификации. -c добавляет сравнение контрольных сумм содержимого. Файлы малы, поэтому затраты невелики; это также обнаруживает изменения равного размера с сохранёнными отметками времени. История версий и резервная копия не создаются. Выполните пробный запуск, затем обновите коллекцию:
rsync -anci --exclude='*.tmp' old/collection/ new/collection/
rsync -aci --exclude='*.tmp' old/collection/ new/collection/
Предварительный результат коллекции должен показывать два обновлённых текста и новое дополнение без временных просмотров. Также возможны изменения только атрибутов.
--delete удаляет записи назначения, которых нет в источнике, внутри выбранного каталога синхронизации. Здесь полностью управляется только generated/, а не корень приёма. Сначала выполните пробное удаление, найдите *deleting obsolete.txt, затем примените точно ту же область:
rsync -anci --delete old/generated/ new/generated/
rsync -aci --delete old/generated/ new/generated/
cat new/generated/current.txt new/collection/texts/addendum.txt new/receiver-note.txt
new/collection/read-book
Вы должны прочитать второе издание списка, новый лист, исходную заметку и обновлённый вывод программы чтения. Зеркалирование всего корня с --delete может стереть заметку. Никогда не используйте его для удаления этого единственного управляемого списка.
Повторите те же пробные запуски:
rsync -anci --exclude='*.tmp' old/collection/ new/collection/
rsync -anci --delete old/generated/ new/generated/
Изменений файлов оставаться не должно. Повторение безопасно в объявленных границах, но последующее удаление в источнике всё равно потребует сознательно решить, какой каталог назначения управляется источником. Только rsync не восстановит исходное издание; используйте отдельную резервную копию, когда нужна история.
Резюме
Вы передали пригодную для работы коллекцию, сохранили скрытую конфигурацию и права программы чтения, а также заметку принимающего стола. Вторая синхронизация обновила управляемые файлы и удалила устаревший список только в объявленной области. Синхронизация имеет направление; она не создаёт резервную копию с историей версий и не объединяет конфликты.



