LINUX.ORG.RU

Подсчитать число байтов в потоке(конвейере) pipe


0

0

Есть такая замечательная команда tee - которая передает данные дальше в stdout, не изменяя, да еще и пишет их в файл.

Нужна гипотетическая утилита (назовем ее countbytes), которая бы отправляла данные в stdout не меняя, а в stderr писала бы, сколько байтов через нее прошло. Очень удобно для всяких подсчетов и прогресс-баров.

Например dd if=/dev/urandom bs=1M count=1000 | countbytes | bla-bla-bla и записать это в какой-то файл или устройство.

А сами сидим и смотрим сколько (мега)байтов уже прошло(обработалось конвейером). Наверняка ведь есть такое? И как оно называется?

anonymous

-

>А сами сидим и смотрим сколько (мега)байтов уже прошло(обработалось конвейером). Наверняка ведь есть такое? И как оно называется?

оно называется man ;)))


#!/bin/bash
mkfifo /tmp/pipe-$$
cat | tee /tmp/pipe-$$ &
cat /tmp/pipe-$$ | wc -c >&2
rm -f /tmp/pipe-$$


обработчик для всяких полезных сигналов типа SIGINT можешь дописать сам ;)


sS ★★★★★
()
Ответ на: - от sS

Про FIFO знаем... А без него никак?

anonymous
()
Ответ на: комментарий от Murr

>Хотя время и объем он пишет только в конце...

Вот то-то и оно! А надо типа прогресс-бара замутить (или хотя бы счетчика). dd - это только для примера. И в tar надо бывает посчитать сколько байтов уже прошло, и в других случаях, и вообще... Неужели нет готовой утилиты?

anonymous
()
Ответ на: комментарий от anonymous

Thanks! То что доктор прописал.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.