26

Есть ли в Linux программа, которая может рассчитать, сколько данных программа выдаст?

Например, если я хочу сделать резервную копию моей базы данных MySQL, я обычно делаю

mysqldump > dumpfile.sql

Вместо этого я хотел бы перенаправить в /dev/null но рассчитать, сколько дискового пространства было бы использовано, например

mysqldump | fancy_space_calc_program

Выход:

123456789 Bytes would have been used

Обратите внимание, резервное копирование MySQL является лишь примером. Я очень хорошо знаю, как я могу оценить размер заранее, поэтому, пожалуйста, без комментариев об этом.

3 ответа3

37

Взято из https://stackoverflow.com/questions/13418688/use-pipe-with-du-to-compute-size-of-stdin

Вы можете передать его в wc -c для подсчета количества байтов, проходящих через конвейер.

Конечно, это только необработанные байты, и они не имеют ничего общего с размером сектора и т.д., Так что возьмите его с крошкой соли ...

28

Команда pv идеально подходит для этого.

mysqldump | pv -b > /dev/null

Я думаю, что приведенное выше даст вам правильную команду, которую вы хотите, может потребоваться некоторая настройка, такая как pv -b | > /dev/null я не могу проверить

-b дает вам значение в байтах.

0

Вы можете использовать для этого dd , например: cat /dev/zero | dd status=progress of=/dev/null bs=4M .

Это предоставляет вам некоторые данные во время и после выполнения об объеме данных, передаваемых ему, например:

$ cat /dev/zero | dd status=progress of=/dev/null                                                                                                                              
5371334656 bytes (5.4 GB, 5.0 GiB) copied, 4 s, 1.3 GB/s^C # this is progress data
12271136+0 records in #summary
12271135+0 records out #summary
6282821120 bytes (6.3 GB, 5.9 GiB) copied, 4.66683 s, 1.3 GB/s #summary

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .