![使用 UNIX 工具确定文件大小的安全方法?](https://linux22.com/image/570363/%E4%BD%BF%E7%94%A8%20UNIX%20%E5%B7%A5%E5%85%B7%E7%A1%AE%E5%AE%9A%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E7%9A%84%E5%AE%89%E5%85%A8%E6%96%B9%E6%B3%95%EF%BC%9F.png)
我想知道,使用常见的 unix 工具确定文件大小的最佳方法是什么。我需要在 shell 脚本中确定文件的大小(以字节为单位)。问题是,shell 脚本需要跨不同的操作系统(如 osx、irix、linux)移植——也就是说:使用“stat”命令可能效果不佳,因为在几乎每个操作系统上,获取我想要的结果所需的参数都不同。
我尝试使用:
cat ... | wc -c
虽然这似乎很有效,但在多字节环境中可能会遇到问题,不是吗?那么:有什么好方法可以做到这一点?
答案1
为此,您可以使用以下内容:
du --block-size=1 filename
我不知道它的可移植性。在命令的手册页中,它被列在 GNU coreutils 包中。
如果要确定文件的大小,而不是其占用的磁盘空间,请添加--表观尺寸。
答案2
cksum 文件
从维基百科
互操作性
大多数类 UNIX 操作系统(包括 GNU/Linux、*BSD、Mac OS X 和 Solaris)上的标准 cksum 命令使用基于以太网标准帧校验的 CRC 算法,因此可以在实现之间互操作
当然,互操作性是针对校验和而言的,而不是针对计数字节部分。
答案3
stat -c %s /path/to/filename
答案4
man wc
打印换行符、单词和 字节计数
user@machine:~$ ls -lh datefix.vim
-rw-r--r-- 1 user group 264 2011-06-28 23:26 datefix.vim
user@machine:~$ wc datefix.vim
6 12 264 datefix.vim
user@machine:~$ wc datefix.vim | awk '{print $3}'
264
wc
不知道也不关心 Unicode——它认为一个字节就是一个字节。我还在一个 234 MB 的 .lzma 文件上测试了这一点以证明这一点……所以简单wc -c
也能让你得到你想要的东西。