【问题标题】:get human friendly file size from shell in unix-like environments [portability]在类 unix 环境中从 shell 获取人类友好的文件大小 [可移植性]
【发布时间】:2016-08-31 15:21:24
【问题描述】:

我正在使用以下内容从 shell 中获取人类友好的文件大小。

ls -hl /path/to/file | awk '{print $5}'

它在带有 bash 的 Mac OSX 中运行良好。我不确定它是否真正便携,或者是否有标准的便携方式来实现相同的结果。

【问题讨论】:

  • 不要解析 ls,而是查看您的 stat 手册页。
  • 但是为了可移植性,您需要使用在多个平台上运行相同的通用语言。例如stackoverflow.com/a/512645/7552
  • 您在寻找怎样的便携性? POSIX?苏?运行busybox的嵌入式系统?
  • 如果你这样做 stat -c %s /path/to/file 会得到你的字节大小。但不是人类友好模式。
  • 只是 posix,人类友好是目标,虽然我想我可以使用 stat 并除以 1024*N

标签: linux bash shell unix


【解决方案1】:

du(1) 的大多数实现都接受-h 标志,这会导致它打印指定文件的磁盘使用情况。磁盘使用量和文件大小之间的差异通常是无害的,四舍五入到最近的文件系统块。

-h 标志虽然得到广泛支持,但却是一个扩展。为了获得最大的便携性,必须手动完成单位转换pointed out by chepner

*BSDIllumosBusyBoxGNU CoreUtils 都支持 -h 标志。

【讨论】:

    【解决方案2】:

    如果您真的想要严格的 POSIX 兼容性,那么您必须按照 this answer to a very similar question 中的建议进行操作,并进行自己的计算(例如在 awk 中)来计算所需的“人类友好”值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多