
Есть ли в Linux программа, которая может рассчитать, сколько данных будет сгенерировано программой?
Например, если я хочу сделать резервную копию своей базы данных MySQL, я обычно делаю следующее:
mysqldump > dumpfile.sql
Вместо этого я хотел бы сделать перенаправление, /dev/null
но подсчитать, сколько дискового пространства будет использовано, например
mysqldump | fancy_space_calc_program
Выход:
123456789 Bytes would have been used
Обратите внимание, что резервная копия MySQL — это всего лишь пример. Я прекрасно знаю, как можно заранее оценить размер, поэтому, пожалуйста, не комментируйте это.
решение1
Взято изhttps://stackoverflow.com/questions/13418688/использование-трубы-с-du-для-вычисления-размера-stdin
Вы можете передать его по конвейеру, чтобы
wc -c
подсчитать количество байтов, проходящих через конвейер.
Конечно, это всего лишь сырые байты, и они не имеют никакого отношения к размеру сектора и т. д., так что воспринимайте это с долей скептицизма...
решение2
Для этого идеально подходит команда pv.
mysqldump | pv -b > /dev/null
Я думаю, что вышеизложенное даст вам нужную команду, возможно, ее нужно будет немного подкорректировать, поскольку pv -b | > /dev/null
я не могу проверить это прямо сейчас.
-b
дает вам значение в байтах.
решение3
Вы можете использовать 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