在 shell 中获取文件大小(以字节为单位)的便携式方法

新手上路,请多包涵

在 Linux 上,我使用 stat --format="%s" FILE ,但我可以访问的 Solaris 机器没有 stat 命令。那我应该用什么?

我正在编写 Bash 脚本,但无法在系统上真正安装任何新软件。

我已经考虑过使用:

 perl -e '@x=stat(shift);print $x[7]' FILE

甚至:

 ls -nl FILE | awk '{print $5}'

但是这些看起来都不明智——运行 Perl 只是为了获取文件大小?或者运行两个程序来做同样的事情?

原文由 user80168 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 963
2 个回答

wc -c < filename (字数的缩写, -c 打印字节数)是一种可移植的 POSIX 解决方案。只有输出格式在平台之间可能不统一,因为可能会预先添加一些空格(Solaris 就是这种情况)。

不要省略输入重定向。当文件作为参数传递时,文件名在字节数之后打印。

我担心它不适用于二进制文件,但它在 Linux 和 Solaris 上都可以正常工作。您可以尝试使用 wc -c < /usr/bin/wc 。此外,POSIX 实用程序 保证可以处理二进制文件,除非另有明确说明。

原文由 Carl Smotricz 发布,翻译遵循 CC BY-SA 3.0 许可协议

我最终编写了自己的程序(非常小)来显示大小。更多信息在 bfsize - 以字节为单位的打印文件大小(仅此而已)

在我看来,使用常见 Linux 工具的两种最简洁的方法是:

 stat -c %s /usr/bin/stat

50000

wc -c < /usr/bin/wc

36912

但我只是不想输入参数或管道输出只是为了获取文件大小,所以我使用我自己的 bfsize

原文由 fwhacking 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题