Я уже искал эту опцию, но нашел только решения, которые включают пользовательские исправления . Тот факт, что он не отображается в --help и больше информации не может быть найдено, вероятно, указывает на то, что ответы - «нет», но я бы хотел, чтобы это подтвердилось.
Можно ли показать общий прогресс передачи файлов с помощью rsync?
Ответы:
Данаким это правильно. Нет простых способов добавить индикатор общего прогресса.
Причина этого заключается в том, что, когда rsync просматривает список файлов для синхронизации, он не знает заранее, какие файлы нужно будет изменить. Если вы выполняете дельта-переводы, сами дельты должны быть рассчитаны заранее, чтобы дать полную картину работы, которую необходимо выполнить.
Другими словами, самый простой способ подсчитать, сколько работы предстоит сделать, - это сделать это на самом деле.
источник
--size-only
или тому подобное, является еще более неточным.Теперь есть официальный способ сделать это в rsync (протокол версии 3.1.0, версия 31, протестировано с Ubuntu Trusty 14.04).
Я попытался с моей
/usr
папкой, потому что я хотел эту функцию для передачи целых файловых систем, и,/usr
казалось, был хорошим представительным образцом.Это
--info=progress2
дает хороший общий процент, даже если это только частичное значение. На самом деле моя/usr
папка более 6 гигов:и
rsync
потребовалось много времени, чтобы просмотреть все это. Таким образом, почти всегда процент, который я видел, был выполнен на 90%, но, тем не менее, приятно видеть, что что-то копируется :)Рекомендации:
источник
--info=progress2
не работает с-v
--no-i-r
коммутатор также, чтобыrsync
он не сканировал пошагово, но полностью перед копированием и знал + показывает, сколько работы осталось.--human-readable
(или-h
), чтобы увидеть общий размер в МБ / ГБ .. в процессе.Вы можете с помощью 'pv' (
apt-get install pv
с Debian и Ubuntu). Я рекомендую отслеживать количество переданных файлов, поскольку объем передаваемых данных зависит не от размера файлов, а от разницы между источником и местом назначения. И подсчет файлов будет считать одинаковый прогресс для одной большой дельты и другой с маленькой дельтой. Это означает, что в любом случае оценка ETA может быть далека. ETA на основе размера работает только в том случае, если пункт назначения пуст, в этом случае delta == размер источника.Общая идея состоит в том, чтобы выдавать одну строку на файл, «переданный» из rsync, и считать эти строки с помощью «pv»:
Я имею тенденцию делать резервные копии целых файловых систем (по нескольким причинам), в этом случае вы можете использовать гораздо более дешевое
df
для получения количества файлов (а неdu
или, которыйfind
будет пересекать вашу исходную иерархию в другой раз после того, как rsync это сделал). Опция -x позволяет убедиться, что rsync остается в той же исходной файловой системе (и не следует за другими внутренними монтируемыми файлами):Если вы хотите считать файлы в / source обычным способом, используйте
find /source|wc -l
(еще раз предупреждение: может быть медленным и тяжелым при вводе / выводе).источник
df -i /source
получает число inode (файлов) от всех разделов, в которых находится / source. В противном случае используйте 'find' для подсчета файлов в каталоге внутри выражения "$ ()".du
илиfind
- скажем, вы заканчиваете неполную копию или делаете обновление на месте с удалениями - это использоватьrsync -ai --dry-run
для получения того же списка файлов, на который будет передаваться основной прогонpv
Следующее относится к rsync версии 3.0.0 и выше. Опции, описанные ниже, были представлены в этом выпуске 1 марта 2008 года.
Наряду с --info = progress2 вы также можете использовать параметр --no-inc-recursive (или его более короткий псевдоним --no-ir ), чтобы отключить инкрементную рекурсию.
Это создаст весь список файлов в начале, а не будет постепенно обнаруживать больше файлов по мере передачи. Поскольку он будет знать все файлы перед запуском, он даст лучший отчет об общем прогрессе. Это относится к числу файлов - он не сообщает о каком-либо прогрессе в зависимости от размера файла.
Это предполагает компромисс. Создание полного списка файлов заблаговременно требует больших затрат памяти и может значительно задержать начало фактической передачи. Как и следовало ожидать, чем больше файлов, тем больше будет задержка и больше памяти.
Следующее из руководства rsync (источник - http://rsync.samba.org/ftp/rsync/rsync.html ):
См. Также https://rsync.samba.org для конкретных различий в версиях (прокрутите вниз и просмотрите ссылки на Release News).
источник
Для длинных передач я доволен бегом
du -s
с обеих сторон. Дажеwatch -n1 du -s
если я действительно беспокоюсь.watch
выполняет команду (du -s
здесь) периодически (каждую секунду здесь) и показывает вывод в полноэкранном режиме.источник
watch
команды!В основном нет. Вы можете отображать прогресс для каждого файла с флагом --progress, но это все.
Я предполагаю, что вы можете написать обертку вокруг него или использовать какие-либо патчи, которые вы уже нашли, но вы должны спросить себя, действительно ли это того стоит, вам действительно нужен общий прогресс для rsync?
источник
--progress
работы с помощью--info=progress2
, он покажет вам глобальный прогресс. Вам нужно будет отключить инкрементальный рекурсивный алгоритм для того , чтобы быть полезным, так--info=progress2 --no-inc-recursive
Я использовал ответ из zerodeux и написал свой собственный маленький скрипт на bash:
источник
Я также искал, как показать общий прогресс с rsync, и я нашел полезный ответ из этого поста: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress
По сути, вы можете использовать --info = progress2 в dev-версии rsync 3.1.0 . Вот что сказал доктор :
источник
--info=name0
это золото 🌈👑Я использовал ответ из zerodeux и написал свой собственный маленький BASH-скрипт:
Я изменил TODO всухую в
Он находит количество файлов очень быстро!
источник
find
работает, только если вы работаетеrsync
локально.rsync --dry-run
работает и с удаленными источниками ...Если у вас нет последней версии rsync (например, OS X имеет версию 2.6.9) и вы не можете ее использовать
--info=progress2
, вот еще одна альтернатива, чтобы уберечь себя от страниц прокрутки текста о ходе работы:rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"
В одной строке будет напечатано имя последнего передаваемого файла:
Transferring: the-latest.file
источник
использование
Чтобы увидеть, какие файлы rsync в данный момент открыт (покажет размер файла), rsync копирует в скрытый файл локально
источник
for i in $(pgrep 'rsync'); do ls -l /proc/$i/fd; done
но ваше решение проще.Я бы сделал это комментарий, но мне не хватило репутации. В ответ на комментарий naught101 к выбранному ответу опция --progress показывает, сколько файлов было передано из общей суммы для передачи. Я не осознавал этого, пока не посмотрел этот пост и не посмотрел на результат более внимательно.
Статистика 'to-check' показывает, сколько файлов осталось из общего количества. Это наиболее полезно при rsync'инге в новое место назначения, поэтому вы знаете, что все файлы будут полностью скопированы.
Со страницы руководства:
источник
Обратите внимание на оговорку, что даже --info = progress2 не совсем надежен, так как этот процент основан на количестве файлов, о которых rsync «знает» о том, когда отображается прогресс. Это не обязательно общее количество файлов, которые необходимо синхронизировать (например, если он обнаруживает большое количество больших файлов в глубоко вложенном каталоге). Один из способов убедиться, что --info = progress2 не «отскочил назад» в индикаторе хода выполнения, - заставить rsync рекурсивно сканировать все каталоги перед началом синхронизации (вместо того, чтобы по умолчанию выполнять инкрементно рекурсивное сканирование), также предоставив опцию --no-inc-recursive. Однако обратите внимание, что эта опция также увеличит использование памяти rsync и время выполнения.
источник
--no-inc-recursive
параметра или его более короткого--no-i-r
псевдонима. (См. Другой ответ)Я использую сценарий, который извлекает информацию из / proc // io для процесса rsync (или любого другого процесса в этом отношении), и зная общую сумму, подлежащую передаче, вычисляет прогресс.
источник
Если ваша версия
rsync
не принимает--info=progress2
опцию, вы можете использоватьtqdm
:Установить:
Использовать:
источник
Возможно, вы можете комбинировать
pv
с rsync. Особенно параметр--size
может быть полезным. Посмотрите на документы, что-то вродеpv --size $(du -sb . | awk '{print $1}') | rsync -av . host:/your/path
должно работать.Здесь вы найдете документы и программное обеспечение.
Сам не пробовал.
источник
Здесь может быть немного поздно, но будущие ищущие ответа могут выиграть.
Это тоже беспокоило меня, поэтому я подумал, что я опустошусь и напишу свой первый сценарий. Пакет zenity должен быть установлен (sudo apt-get install zenity), но я уверен, что он, вероятно, уже будет там. Кроме того, я использую wmctrl (управление оконным менеджером), чтобы изменить заголовок диалогового окна прогресса, когда оно будет сделано, его легко установить, но если вы этого не сделаете, это не будет иметь никакого значения. Мне просто нравится видеть, когда это будет сделано в моей панели.
Сценарий в основном запрашивает каталог источника и назначения, вычисляет процентное соотношение места назначения и размера источника с использованием du и отображает индикатор выполнения.
Примечание: это работает только для полной синхронизации каталогов / файлов (я обычно использую его для создания резервных копий apt-кэша), поэтому --exclude = / file / in / Source-directory опция отсутствует. Также не будет работать, если есть файлы / каталоги в каталоге назначения, а не в исходном каталоге. Я не уверен, работает ли он для удаленных источников / мест назначения, поскольку у меня никогда не было необходимости в нем или в ресурсах для его проверки.
PS. Этот сценарий может быть очень плохо написан или очень неэффективен (скрипт-девственница здесь), но, по крайней мере, он служит своей цели и, конечно, вы можете редактировать и улучшать его в соответствии с вашими потребностями. PSS. Кроме того, не удалось получить кнопку отмены, чтобы убить rsync, поэтому я просто удалил ее.
источник