如何让 `ls` 以兆字节显示文件大小?

Pau*_*ake 684 linux ls

我需要什么命令让 Linuxls以 MB 为单位显示文件大小?

use*_*ser 782

ls -l --block-size=M将为您提供长格式列表(需要实际查看文件大小)并将文件大小四舍五入到最接近的 MiB。

如果您想要 MB(10^6 字节)而不是 MiB(2^20 字节)单位,请--block-size=MB改用。

如果您不想将M后缀附加到文件大小,则可以使用类似--block-size=1M. 感谢Stéphane Chazelas提出这个建议。

如果您只是想要以“合理”为单位的文件大小,而不是专门的兆字节,那么您可以使用-lh来获得长格式列表和人类可读的文件大小演示。这将使用文件大小的单位,以保持文件大小带有约1-3个数字(所以你会看到文件大小不一样6.1K151K7.1M15M1.5G等。

--block-size参数在 ls 的手册页中有描述;man ls并搜索SIZE. 它也允许使用 MB/MiB 以外的单位,并且从它的外观来看(我没有尝试过)任意块大小(因此如果需要,您可以将文件大小视为 429 字节块的数量到)。

请注意,--block-size-h都是Open Groupls之上的 GNU 扩展,因此如果您没有 GNU 用户空间(大多数 Linux 安装都有),这可能不起作用。在ls从GNU Coreutils的8.5确实支持--block尺寸和-h如上所述。感谢kojiro指出这一点。

  • 一个差异可能值得注意:`--block-size=M` 会导致在大小旁边显示一个 `M` 后缀,你可以使用 `--block-size=1M` 来省略它。值得一提的是,您需要 GNU ls(大多数非嵌入式 Linux 系统都将具有 GNU ls)。 (15认同)
  • @Tom 正如答案的最后一段所说,`--block-size` 是一个 GNU 扩展。我怀疑 Mac OS X 不使用 GNU `ls`。 (7认同)
  • @EmanuelBerg,1000^7 (10^21) 大于 2^64(即 ~10^19.27) (3认同)
  • @MichaelKjörling 我可以确认 --block-size 标志在 Mac OS X 10.13.2 上导致错误,但 ls -lh 确实有效。 (3认同)
  • 这会是 GNU `ls` 吗?[标准`ls`](http://pubs.opengroup.org/onlinepubs/009695399/utilities/ls.html) 没有这样的论点。使用 [xsi 扩展](http://pubs.opengroup.org/onlinepubs/009695399/help/codes.html#XSI) `ls` 具有 `-s` 标志,这使得它报告块数,但是没有标准标志`--block-size`。 (2认同)
  • @kojiro GNU ls 从 coreutils 8.5 开始确实有 `--block-size`,这是我的 Debian Squeeze 系统上安装的。由于这个问题是明确针对 Linux 的并且没有指定任何其他内容,我承认我假设了一个以 GNU coreutils 为中心的用户空间。我已经更新了答案以澄清这一点。(此外,Open Group ls 似乎也没有 -h。`:)`) (2认同)
  • @RickO'Shea 因为将 `-h` 传递给 `ls` 并不能保证以兆字节为单位打印大小。由于该问题专门询问如何让 `ls` 以兆字节为单位显示文件大小,因此建议使用 `-h` 仅针对部分可能性提供了该问题的答案。也就是说,如果您愿意,有一个答案特别建议使用 `ls -lh`。 (2认同)

Sir*_*rex 560

ls -lh 给出人类可读的文件大小,长格式。

它根据需要使用 k、M、G 和 T 后缀(或不使用字节后缀),因此数字保持较小,例如1.4K178M

-h 是 GNU coreutils 扩展,而不是基线 POSIX。

请注意,这并不能完全按照要求回答问题。如果即使对于小型或巨大的文件,您也希望严格以 MiB 为单位的大小,Michael Kjörling 的回答适用于 GNU coreutilsls

  • 赞成。“这不能回答(MB)问题”是一个完全有效的陈述,但是这个答案只会增加这个 SO 页面的实用性,因为这个答案是在相同的上下文中。我只是来到这个页面寻找通用“以人类可读形式显示日期”要求的解决方案,并且 `h` 比 `--block-size=M` 更容易编写 (13认同)
  • “人类可读”有点讽刺。如果不是人类,谁会使用 `ls -l`?:p (9认同)
  • @MichaelKjörling 我不认为这是一个糟糕的答案(尽管我没有投票)。有时 OP 并没有像他们应该的那样准确地表达一个问题,所以他们可能只是想要人类可读的输出,而是将其表述为“以 MB 为单位”。 (8认同)
  • 这将以 GB 为单位打印任何大于 1.0 GiB 的文件大小(我相信)。 (4认同)
  • @chengyang:在 99% 的情况下,解析 `ls -l` 输出是错误的做事方式。https://unix.stackexchange.com/questions/128985/why-not-parse-ls。这 1% 是慷慨的,并且几乎仅限于您以交互方式编写的一次性使用的单行代码,而不是您将在未知文件名上重复使用的脚本。 (3认同)
  • @Blauhirn:有时您需要精确的字节大小,您可以复制/粘贴或与另一个数字进行比较,而不是可以快速阅读的舍入大小。但我明白你的意思,这有点好笑。 (2认同)