计算将使用多少磁盘空间

fan*_*nts 25 linux disk-space

Linux 上是否有一个程序可以计算一个程序会产生多少数据?

例如,如果我想备份我的 MySQL 数据库,我通常会这样做

mysqldump > dumpfile.sql
Run Code Online (Sandbox Code Playgroud)

相反,我想重定向到/dev/null但计算将使用多少磁盘空间,例如

mysqldump | fancy_space_calc_program
Run Code Online (Sandbox Code Playgroud)

输出:

123456789 Bytes would have been used
Run Code Online (Sandbox Code Playgroud)

请注意,MySQL 备份只是一个示例。我非常清楚我可以如何事先估计尺寸,所以请不要对此发表评论。

Mag*_*nus 37

取自/sf/ask/939308191/

您可以通过管道将其wc -c用于计算通过管道的字节数。

当然,这只是原始字节,与扇区大小等无关,所以请谨慎对待......

  • @马格努斯。我想你错过了文字游戏。WC 是美国人所说的浴室的英式术语。您正在将未使用的数据通过管道传输到 WC。 (8认同)
  • @cat 一个好的`wc` 实现会尽快丢弃它不再需要的数据。 (6认同)
  • @Frxstrem您当然*确实*需要缓冲来计算行数或字符数-一旦您不再使用同构编码。从 POSIX.2 开始,`wc -c` 不计算字符数 - 它计算字节数。`wc -m` 计算字符数。最明显的区别是多字节字符,如 UTF-16 或 Windows `\r\n`(ASCII 中的两个字节,但一个字符)。大多数时候它不一定需要大量缓冲,但 Unicode 可以有任意数量的字节来表示单个字符;不是您在受信任数据中看到的东西,而是可能的缓冲区溢出向量。 (3认同)
  • @cat 我认为它不太可能被缓冲,因为你不需要缓冲来计算行数或字符数。我电脑上的 GNU coreutils `wc` 可以轻松处理 40 GB 的 stdin 数据,只有 8 GB 的内存。 (2认同)

djs*_*ide 28

命令 pv 非常适合于此。

mysqldump | pv -b > /dev/null
Run Code Online (Sandbox Code Playgroud)

我认为以上会给你你想要的正确命令,它可能需要一些调整,比如pv -b | > /dev/null我现在无法测试

-b 给你一个字节值。

  • 我以前从未听说过 `pv`.. 你每天都在学习新东西 :) (2认同)
  • @Magnus :我认为 wc 较旧(一些较旧的 Unix 系统的一部分),文档不多,并且(很可能因此)pv 预装在较少的发行版中。不过,很高兴知道。看到这张来自[“pv”(“管道查看器”)程序主页](http://www.ivarch.com/programs/images/pv.png) .ivarch.com/programs/pv.shtml) (2认同)