Индикатор выполнения фиксированной длины, число файлов или байтов или, что еще лучше, таймер, показывающий приблизительное оставшееся время, было бы идеальным.
zip
Стандартное поведение, по-видимому, заключается в печати строки для каждого обработанного файла, но я не хочу, чтобы эта информационная перегрузка была связана с сжатием тысяч файлов. Я хочу предположить, сколько времени это займет.
Я попробовал опцию -q
( --quiet
) в сочетании с -dg
( --display-globaldots
), но это просто затопляет стандартный вывод несколькими строками точек и не дает никаких полезных указаний.
Я также попробовал, -qdgds 10m
как упоминалось в справочной странице, но получил тот же результат.
Затем я попытался -db
( --display-bytes
) и -dc
( --display-counts
), но, похоже, не существует глобального параметра, поэтому он снова печатает его для каждого имени файла.
Наконец, я попробовал это вместе с -q
лайком -qdbdc
, но это ничего не дает.
Как ни странно, я нашел страницу man на сайте info-zip, в которой упоминается опция -de
( --display-est-to-go
), которая должна «отображать приблизительное время завершения операции архивирования».
Это похоже на то, что я хочу, но проблема в том, что моя версия zip
не имеет этой функции. Я использую Ubuntu 14.04.1 64bit, bash-4.3.30 (1) и zip-3.00. Согласно Википедии, это последний стабильный релиз zip.
На странице info-zip sourceforge есть неизданные бета-версии, но я бы не стал доверять свои данные бета-версии.
источник
tee
. Перед запуском zip, сделайте общее количество файлов (с помощьюls
илиfind -type f
) и, пока он архивирует, прочитайте файл журнала на количество строк обработанных файлов, которые у него уже есть (с помощьюgrep
для просмотра правильных строк иwc -l
для строк считать), поэтому ваша информация высокого уровня будет отображать что-то вроде «234/76438 обработанных файлов»;pv /path/to/file | gzip > /path/to/file.gz
Ответы:
zip
может сжимать данные в стандартный вывод. Следовательно, вы можете комбинировать его с другими инструментами, такими какpv
:Удалите один из
-bep
вариантов для вашего удобства.источник
Если вы в порядке с использованием 7z:
Это даст вам индикатор выполнения, как это:
источник
Я успешно использовал следующее:
И это объясняется ниже:
Записать рекурсивно в [target_zip] файл [folder_to_zip], перенаправив stderr на стандартный вывод. Обратите внимание, что stderr будет содержать одну строку для каждого обрабатываемого файла и каталога .
передайте в pv строки с именами файлов, когда они выводятся из zip. PV работает в режиме строки (подсчет прогресса на основе количества строк и размера также зависит от количества ожидаемых строк - см. справочную страницу PV -l ).
Общий размер ожидаемых строк собирается путем рекурсивного перечисления (ls) [folder_to_zip] и подсчета строк, начинающихся с «-» или «d», то есть всех файлов и каталогов (помните, что каталоги перечислены, начиная с «/») .
Выше приведен точный процент выполнения, так как 100% достигается, когда все файлы и каталоги обработаны.
Проблема с ответом pedroapero состоит в том, что прогресс рассчитывается на основе количества обработанных (сжатых) байтов по отношению к общему количеству байтов для обработки (без сжатия). В результате процесс завершится на уровне около 30% (в зависимости от степени сжатия).
источник