27 апреля 2012 г.

linux: утилита pv (pipeviewer)

Прикрутил к небольшому скрипту дампа полезную маленькую утилитку pv (pipeviewer), теперь при архивации показыается бегущая шкала и остаток времени, полезно очень.

Как это выглядит:
$ dumparch ./.thunderbird
202MB 0:01:29 [9,67MB/s] [===>        ] 20% ETA 0:05:47

#!/bin/sh

DATE=`/bin/date "+%0Y%0m%0d-%0k%0M%0S"`
FILE=$1
NAME=`basename $FILE`
DSTFILENAME=$DATE-$NAME.tar.gz

SRCSIZE=`du -sb $FILE | grep -o '[0-9]*\s'`

tar -chzf - $FILE | pv -s $SRCSIZE > $DSTFILENAME

Что происходит? tar отдаёт сжатые данные не в файл, как в оригинале, а через пайп в pv, которая их обрабатывает. Далее уже пайп сливается в файл.
Для того, чтобы pv могла вычислить сколько ей времени осталось через -s передаётся размер, вычисляемый через du.

Правда я потом уже понял, что размер то передаю исходного каталога, а в пайп пихаю сжатые данные, так что оценка получается несколько завышенной. Так что заканчивается как-то так:

$ dumparch ./.thunderbird
1,84GB 0:05:35 [5,62MB/s] [==================================>                     ] 63%

Правильнее будет сначала tar-ить в пайп без сжатия, потом pv обрабатывать, а потом уже gzip-ом сжимать и сливать в файл. В итоге как-то так:

tar -chf - $FILE | pv -s $SRCSIZE | gzip > $DSTFILENAME

Теперь всё нормально:

$ dumparch ./.thunderbird
2,89GB 0:05:03 [9,72MB/s] [======================================================>] 100% 

Комментариев нет:

Отправить комментарий