rsync - сообщает только загруженные файлы


14

У меня проблема с rsync: либо он показывает мне все файлы в каталогах, которые я rsyncing (если используется флаг -v), либо вообще ничего (если не используется -v).

Я бы хотел, чтобы rsync работал тихо, за исключением файлов, которые фактически должны были быть загружены в дальний конец. Есть ли флаг для активации этого вида отчетности? Я не могу найти это в документации

Ответы:


11

Да, проверьте -iфлаг. Он дает отчет о каждой операции в загадочном формате. Смотрите man-страницу для точного определения формата.

Чтобы получить список файлов, которые отправляются на удаленный хост, вы можете использовать следующее:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
Это снова сообщает обо всех файлах, а не об измененных.
dangonfast

@gonvaled Нет, выводятся только файлы, отправленные на удаленный хост (например <fcstpoguax filename, где различные флаги показывают, почему их нужно обновить). Если он сообщает обо всех файлах, возможно, что-то не так с вашим тестом или вашей средой.
Оливер

Я думаю, вы правы. Я посмотрел на справочную страницу, и она описана, как вы говорите. Но моя система сообщает обо всех файлах. Может быть, что-то не так с дальним концом ...
dangonfast

Мммм. приближаемся: строка отчета есть (для всех файлов) <f..T....... Согласно справочной странице, это связано с метками времени.
dangonfast

1
использование grep -E '^[^.]|^$'также пропустит статистику (или предупреждения, ошибки, ...) строк, удаляя только очень скучные строки, начинающиеся с точки ...
Фрэнк

9

rsync с одним -vфактически печатает только переданные файлы. Если вы получаете полный список каждый раз, то это, вероятно, означает, что стандартный алгоритм сравнения rsync src / dest, основанный на времени модификации + размере, не подходит для вашего случая. Вы можете добавить флаг -c( --checksum), который rsync сравнивает файлы путем контрольной суммы. Обратите внимание, что это, очевидно, влечет за собой некоторые накладные расходы ввода-вывода.

Слегка связан тот факт, что если вы используете --info=flistвместо -vэтого, вы получите более урезанный вывод файлов (вы в основном пропускаете верхний и нижний колонтитулы типичного -vвывода).


1
--info=flistдоступен только в rsync> = 3.1, который доступен не везде. Например, macOS поставляется с древней версией 2.6.9, потому что Rsync v3 не
выпущен

1
Хотя слухи о том, что Apple GPL является супер сочным, помните, что Enterprise Linux имеет большой диапазон поддержки (14 лет), когда версии заблокированы (и разветвлены), чтобы сохранить сертификацию и гарантировать совместимость (api + abi) в течение поддерживаемого срока действия релиза. , На самом деле это единственно возможный способ сделать это, и побочным эффектом является то, что номера версий кажутся старыми, а новые функции не появляются на предприятии в течение долгого времени.
user2066657

2

одна вещь, которая приходит мне в голову, - это использовать более подробный формат журнала и получать то, что вы хотите получить.

например:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

это не очень надежно, оно не будет хорошо обрабатывать имена файлов с пробелами.


1

1. Используйте -iопцию

Для этих значков (или: загадочных) поменяйте флаги. Ваш вывод будет выглядеть так:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. grep каждой строки, начинающейся с точки.

Пусть все остальные строки (также пустые, для разборчивости) проходят:

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

И вот мы здесь :-) - именно то, что доктор прописал:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

Избегание точек вместо того, чтобы искать, > имеет то преимущество, что позволяет статистике, а также потенциальным ошибкам, предупреждениям и т. Д. Проходить через ...

Наличие статистики в конце - это личное предпочтение. Не используйте, -h --statsесли вам не нравится это. Я предполагаю, что ваш ключевой интерес заключается в том, чтобы не видеть прокрутки сотен или тысяч неизмененных файлов ...


0

Я не думаю, что есть флаг, чтобы сделать это, но может быть сейчас. Вот как я это сделал:

rsync -vv [other options] | grep -v 'uptodate'

1
Мой rsync (версия 3.0.7) не добавляет uptodateк отчетам, поэтому отфильтровать это невозможно.
dangonfast

Я хочу исправить или хотя бы уточнить, что написал Майк выше и на что указал @ jeckyll2hide. Я думаю, что проблема не в том, что rsync -v больше не выдает строку «uptodate», а в том, что вам нужно использовать rsync -vv. Обратите внимание, что два против. Я только что проверил, что это работает на Ubuntu 14.04 с rsync версии 3.1.0. Майк, ты можешь обновить свой пост, чтобы отразить это?
Джон Марк Митчелл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.