Давайте посмотрим, как работает rsync, и лучше поймем загадочные строки результатов:
1 - Огромным преимуществом rsync является то, что после прерывания в следующий раз он продолжает работать плавно.
При следующем вызове rsync файлы, которые уже были переданы, не будут перенесены, если они не были изменены за это время. Но он снова начнет проверять все файлы с самого начала, так как не знает, что это было прервано.
2 - Каждый символ представляет собой код, который можно перевести, если вы прочитаете раздел -i, --itemize-changes
вman rsync
Расшифровка вашего примера файла журнала из вопроса:
> f.st ......
> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different
.d..t ......
. - the item is not being updated (though it might have attributes
that are being modified)
d - it is a directory
t - the time stamp is different
> f +++++++++
> - the item is received
f - a regular file
+++++++++ - this is a newly created item
Соответствующая часть справочной страницы rsync:
-i, --itemize-changes
Запрашивает простой подробный список изменений, которые вносятся в каждый файл, включая изменения атрибутов. Это в точности то же самое, что и указание --out-format = '% i% n% L'. Если вы повторите эту опцию, неизмененные файлы также будут выведены, но только если принимающий rsync имеет версию не ниже 2.6.7 (вы можете использовать -vv со старыми версиями rsync, но это также включает вывод других подробных сообщений- мудрецы).
Экранирование "% i" имеет загадочный вывод, состоящий из 11 букв. Общий формат похож на строку YXcstpoguax, где Y заменяется типом выполняемого обновления, X заменяется типом файла, а другие буквы представляют атрибуты, которые могут выводиться, если они изменяются.
Типы обновления, которые заменяют Y, следующие:
- A
<
означает, что файл передается на удаленный хост (отправляется).
- A
>
означает, что файл передается на локальный хост (получен).
- A
c
означает, что для элемента происходит локальное изменение / создание (например, создание каталога или изменение символической ссылки и т. Д.).
- А
h
означает , что элемент является жесткой ссылкой на другой элемент (требуется --hard-ссылки).
- Значок
.
означает, что элемент не обновляется (хотя у него могут быть изменяемые атрибуты).
- A
*
означает, что остальная часть области вывода содержит сообщение (например, «удаление»).
Типы файлов, которые заменяют X: f
для файла, a d
для каталога, an L
для символической ссылки, a D
для устройства и a S
для специального файла (например, именованных сокетов и fifos).
Остальные буквы в приведенной выше строке - это фактические буквы, которые будут выводиться, если соответствующий атрибут для элемента обновляется, или "." без изменений. Три исключения из этого: (1) вновь созданный элемент заменяет каждую букву на «+», (2) идентичный элемент заменяет точки пробелами и (3) неизвестный атрибут заменяет каждую букву на «?» (это может произойти при разговоре со старым rsync).
Атрибут, связанный с каждой буквой, выглядит следующим образом:
- A
c
означает, что либо у обычного файла другая контрольная сумма (требуется --checksum), либо что символическая ссылка, устройство или специальный файл имеют измененное значение. Обратите внимание, что если вы отправляете файлы в rsync до версии 3.0.1, этот флаг изменения будет присутствовать только для обычных файлов с разной контрольной суммой.
- A
s
означает, что размер обычного файла отличается и будет обновляться при передаче файла.
- A
t
означает, что время модификации другое и обновляется до значения отправителя (требуется --times). Альтернативное значение T означает, что время модификации будет установлено равным времени передачи, что происходит, когда файл / символическая ссылка / устройство обновляется без --times и когда символическая ссылка изменяется и получатель не может установить свое время. (Примечание: при использовании клиента rsync 3.0.0 вы можете увидеть флаг s в сочетании с t вместо правильного флага T для этого сбоя установки времени.)
- A
p
означает, что разрешения различны и обновляются до значения отправителя (требуется --perms).
- An
o
означает , что владелец отличается и обновляется на значение отправителя (требует --owner и привилегии супер-пользователя).
- A
g
означает, что группа отличается и обновляется до значения отправителя (требуется --group и полномочия для установки группы).
u
Слот зарезервирован для использования в будущем.
- Это
a
означает, что информация ACL изменилась.
- Значок
x
означает, что изменилась расширенная информация об атрибутах.
Возможен еще один вывод: при удалении файлов "% i" будет выводить строку "* deleting" для каждого удаляемого элемента (при условии, что вы разговариваете с достаточно свежим rsync, чтобы он регистрировал удаления, а не выводил их как подробное сообщение).
Некоторое время назад мне нужно было понять
rsync
вывод сценария, который я писал. В процессе написания этого сценария я поискал в Google и пришел к тому, что @mit написал выше . Я использовал эту информацию, а также документацию из других источников, чтобы создать свой собственный учебник по битовым флагам и о том, как получитьrsync
выходные битовые флаги для всех действий (по умолчанию этого не происходит).Я публикую эту информацию здесь в надежде, что она поможет другим, кто (как и я) наткнуться на эту страницу через поиск и нуждается в более подробном объяснении
rsync
.При комбинации
--itemize-changes
флага и с-vvv
флагом,rsync
дает подробный вывод всех изменений файловой системы , которые были определены в исходном каталоге, по сравнению с целевым каталогом. Битовые флаги, созданные сrsync
помощью, затем можно декодировать, чтобы определить, что изменилось. Чтобы расшифровать значение каждого бита, используйте следующую таблицу.Объяснение каждой битовой позиции и значения в
rsync
выводе:Некоторые примеры вывода rsync для различных сценариев:
rsync
Вывод захвата (сфокусированный на битовых флагах):В моих экспериментах, как
--itemize-changes
флаг и-vvv
флаг необходимы , чтобы получитьrsync
на выход запись для всех изменений в файловой системе. Без-vvv
флага triple verbose ( ) я не видел в списке изменений каталогов, ссылок и устройств. Стоит поэкспериментировать с вашей версией rsync, чтобы убедиться, что она соблюдает и отмечает все, что вы ожидали.Одним из удобных способов использования этого метода является добавление
--dry-run
флага к команде и сбор списка изменений, определенного rsync, в переменную (без внесения каких-либо изменений), чтобы вы могли самостоятельно выполнить некоторую обработку списка. Что-то вроде следующего будет фиксировать вывод в переменной:В приведенном выше примере вывод (stdout)
rsync
перенаправляется наgrep
(через stdin), поэтому мы можем изолировать только строки, содержащие битовые флаги.Обработка захваченного вывода:
Затем содержимое переменной можно регистрировать для дальнейшего использования или сразу же перебирать для интересующих элементов. Я использую эту точную тактику в сценарии, который написал во время исследования
rsync
. Вы можете посмотреть в скрипте ( https://github.com/jmmitchell/movestough ) примеры пост-обработки захваченного вывода для изоляции новых файлов, дубликатов файлов (то же имя, то же содержимое), конфликтов файлов (то же имя, разные content), а также изменения в структуре подкаталогов.источник
1) Wodin, это не совсем так. Если используется тег --partial или -P (такой же, как --partial --progress), rsync возобновляет прерванные передачи.
2) Точно, это обычный вывод для тега --itemize-changes.
источник
1.) Он «перезапустит синхронизацию», но не будет передавать файлы с одинаковым размером и отметкой времени и т. Д. Сначала он создает список файлов для передачи, и на этом этапе он увидит, что он уже передал некоторые файлы. и пропустит их. Вы должны указать rsync, чтобы он сохранял отметки времени и т. Д. (Например, используя
rsync -a ...
)Пока rsync передает файл, он будет называть его как-то вроде
.filename.XYZABC
вместоfilename
. Затем, когда он завершит передачу этого файла, он переименует его. Итак, если вы отключите rsync во время передачи большого файла, вам придется использовать параметр --partial, чтобы продолжить передачу, а не начинать с нуля.2.) Я не знаю, что это такое. Вы можете вставить несколько примеров?
РЕДАКТИРОВАТЬ: согласно http://ubuntuforums.org/showthread.php?t=1342171 эти коды определены на странице руководства rsync в разделе для
-i, --itemize-changes
параметра.Исправлена часть, если мой ответ основан на Жоао
источник