Answers:
使用pv管道查看器。这是一个很棒的工具。一旦知道了它,就永远不会知道没有它的生活。
它还可以显示进度条和传输的“速度”。
cat file | pv -b
将返回文件的大小。
process_a | tee >(process_b) | wc --bytes
可能有用。然后,您可以将wc
的计数重定向到您需要的任何位置。如果process_b
向stdout
/ 输出任何内容,则stderr
您可能需要将其重定向到某个地方(如果仅有)/dev/null
。
举一个人为的例子:
filestore:~# cat document.odt | tee >(dd of=/dev/null 2>/dev/null) | wc --bytes
4295
通过解释的方式:tee
让您将输出定向到多个文件(加上stdout),并且>()
构造是bash的“进程替换”,在这种情况下,该过程使进程看起来像只写文件,因此您可以重定向到进程以及文件(请参阅此处,或此问题+答案以获取用于tee
将输出发送到许多流程的示例)。
我知道我参加晚会很晚,但是我相信我有一个很好的答案,可以增强这个有用的线索。
这是@Phil P和@David Spillett答案的混合,但是:
字节数与process_b的任何输出一起输出到stdout。
在使用output(Bytes:
在示例中)时,可以使用前缀来标识包含字节的行。
exec 3>&1
process_a | tee >({ echo -n 'Bytes:'; wc -c; } >&3) | process_b
exec 3>&-
警告:
请勿依赖输出中各行
的顺序该顺序是不可预测的,即使使用相同参数调用相同脚本时也可能总是不同!
exec
并直接将其直接输出到文件吗?input-command | dd 2>~/fred | output-command