С GNU tar
вы можете просто сделать:
tar --totals -c . >/dev/null
... который будет выводить как ...
Total bytes written: 5990400 (5.8MiB, 5.5GiB/s)
... на stderr. Точно так же с любым tar (или потоком) вы можете использовать dd
для доставки отчета о количестве байтов. Это может быть или не быть предпочтительным wc
, но по dd
умолчанию размер блока составляет 512 байт, что соответствует tar
размеру блока в России. Если PIPE_BUF вашей системы достаточно велик, вы можете даже увеличить dd
размер блока до соответствия tar
размеру записи - который составляет 20 блоков или 10240 байт. Нравится:
tar -c . | dd bs=bx20 >/dev/null
585+0 records in
585+0 records out
5990400 bytes (6.0 MB) copied, 0.0085661 s, 699 MB/s
Это может или не может предложить более эффективное решение, чем wc
.
В обоих dd
и tar
потребительных случаях вам не нужно на самом деле избавиться от потока, хотя. Я перенаправил на /dev/null
выше - но я мог так же легко перенаправить на какой-то файл и все же получить отчет о его размере на момент его написания.
wc
лишнее,-
то и последующаяcut
команда вам не нужна .