У меня есть пара больших файлов, которые я хотел бы сжать. Я могу сделать это, например, с
tar cvfj big-files.tar.bz2 folder-with-big-files
Проблема в том, что я не вижу никакого прогресса, поэтому я понятия не имею, сколько времени это займет или что-то в этом роде. Используя, v
я могу по крайней мере увидеть, когда каждый файл будет завершен, но когда файлов мало и они большие, это не самый полезный.
Есть ли способ получить tar, чтобы показать более детальный прогресс? Например, процент выполнения или индикатор выполнения или оставшееся время или что-то еще. Либо для каждого отдельного файла, либо для всех, либо для обоих.
pv $FILE.tgz | tar xzf - -C $DEST_DIR
tar cf - /folder-with-big-files -P | pv -s $[$(du -sk /folder-with-big-files | awk '{print $1}') * 1024] | gzip > big-files.tar.gz
без этого изменения я получал-bash: syntax error near unexpected token ')'
Вы можете использовать PV для достижения этой цели. Чтобы правильно сообщить о прогрессе,
pv
нужно знать, сколько байтов вы на него бросаете. Итак, первым шагом является вычисление размера (в килобайтах). Вы также можете полностью сбросить индикатор выполнения и простоpv
сказать, сколько байтов он видел; это сообщило бы: «сделано так много и так быстро».А потом:
источник
pv
похоже, не поставляется с Mac OS X, но попробую это, как только у меня будет компьютер с MacPorts. Не могли бы вы объяснить, что вы там делаете? Не совсем уверен, что именно делает первая строка.SIZE=$(($SIZE * 1000 / 1024))
- Я не знаю, является ли это причудой на моей конкретной платформе, поэтому я не добавляю ее в ответ:du
возвращает размер, где 1 КБ = 1024 байта, в то время как,pv
кажется, ожидает 1 КБ = 1000 байт. (Я нахожусь на Ubuntu 10.04)du
использовать предпочтительный размер блока, напримерdu -s --block-size=1000
, или просто работать с простыми байт, например , падениеk
«S отdu
иpv
вызовов. Тем не менее, я ожидал бы, что оба будут использовать,1024
если не указано иное, например,--si
включениеdu
, например.du -sb
иpv -s
без какого-либо модификатора). это должно положить конец всей путанице.лучше прогресс бар ..
источник
Проверьте параметры
--checkpoint
и--checkpoint-action
на странице информации о tar (что касается моего дистрибутива, описание этих параметров не содержится на странице руководства → RTFI).См. Https://www.gnu.org/software/tar/manual/html_section/tar_26.html.
С их помощью (и, возможно, с функциональностью, чтобы написать свою собственную команду контрольной точки), вы можете рассчитать процент ...
источник
tar
специфично для GNU .Вдохновленный ответом помощника
Другой способ - использовать нативные
tar
опциирезультат как
полный пример здесь
источник
Использование только смолы
tar
имеет опцию (начиная с v1.12) для печати информации о состоянии сигналов--totals=$SIGNO
, например:Total bytes written: [...]
Информация печатается на каждом сигнале USR1, например:Источник:
источник
Только что заметил комментарий о MacOS, и хотя я думаю, что решение от @akira (и pv) гораздо точнее, я подумал, что я поймал догадку и быстрый обходной путь в моей коробке MacOS с tar и отправил бы ему сигнал SIGINFO. Как ни странно, это сработало :), если вы работаете в BSD-подобной системе, это должно работать, но на Linux-боксе вам может потребоваться отправить SIGUSR1 и / или
tar
может не работать так же.Недостатком является то, что он предоставит вам только вывод (на стандартный вывод), показывающий, как далеко находится текущий файл, так как я предполагаю, что он понятия не имеет, насколько велик поток данных, который он получает.
Так что да, альтернативный подход - запускать tar и периодически отправлять SIGINFO каждый раз, когда вы хотите узнать, как далеко он продвинулся. Как это сделать?
Специальный ручной подход
Если вы хотите иметь возможность проверять статус на специальной основе, вы можете нажать
control-T
(как упомянул Брайан Свифт) в соответствующем окне, которое передаст сигнал SIGINFO. Я полагаю, что проблема в том, что он отправит его всей вашей цепочке, так что если вы делаете:Вы также увидите bzip2 отчет о его статусе вместе с tar:
Это хорошо работает, если вы просто хотите проверить, зависает ли
tar
ваш бег, или просто медленно. В этом случае вам, вероятно, не нужно слишком беспокоиться о проблемах форматирования, так как это всего лишь быстрая проверка.Этакий автоматизированный подход
Если вы знаете, что это займет некоторое время, но хотите что-то вроде индикатора прогресса, альтернативой может быть запуск вашего процесса tar, а в другом терминале определить его PID, а затем выбросить его в скрипт, который просто несколько раз посылает сигнал через , Например, если у вас есть следующий скриптлет (и вызовите его, как говорится
script.sh PID-to-signal interval-to-signal-at
):Если вы вызываете его таким образом, поскольку вы нацеливаетесь только на него,
tar
вы получите более похожий результатчто я признаю, это довольно мило.
И последнее, но не менее важное - мои скрипты довольно ржавые, поэтому, если кто-то захочет пойти и почистить / исправить / улучшить код, продолжайте свою жизнь :)
источник
tar
в командной строке, при вводе командыcontrol-T
будет отправлено SIGINFO. Если бы это было в сценарии, это было бы сделано сkill -INFO pid
control-T
, я явно привык спамить слишком много окон консоли для моего же блага ..kill -l
Вдохновленный ответом Ноа Спурриера
Источник
источник
Если вы знаете номер файла вместо общего размера всех из них:
альтернатива (менее точная, но подходящая) заключается в использовании опции -l и отправке в канале unix имен файлов вместо содержимого данных.
Давайте поместим 12345 файлов в mydir , команда:
вы можете знать это значение заранее (из-за вашего варианта использования) или использовать какую-то команду, например find + wc, чтобы обнаружить его:
источник
tar cfvz ~/mytarfile.tgz . | pv -s $(find . | wc -l) -l > /dev/null
, Работает ли это для вас?Метод, основанный на tqdm :
источник
В macOS сначала убедитесь, что у вас есть все доступные команды, и установите недостающие (например
pv
), используя brew .Если вы хотите только
tar
без сжатия , используйте:Если вы хотите сжать , перейдите с:
источник
Вот несколько номеров резервной копии Prometheus (метрических данных) на Debian / buster AMD64:
Отменил это задание, так как на диске недостаточно свободного места.
Эксперименты с
zstd
компрессором дляtar
мониторинга прогресса с использованиемpv
:источник