splattne Asked: 2009-07-08 01:45:20 +0800 CST2009-07-08 01:45:20 +0800 CST 2009-07-08 01:45:20 +0800 CST 查找文件大小(以 MB 为单位) 772 如何在 UNIX 命令行中查找文件的大小(以 MB 为单位)? unix 9 个回答 Voted laalto 2009-07-08T02:12:20+08:002009-07-08T02:12:20+08:00 如果您的ls支持--block-size(例如 GNU coreutils ls)确实如此: ls -s --block-size=1048576 filename | cut -d' ' -f1 dfa 2009-07-08T01:46:49+08:002009-07-08T01:46:49+08:00 du -h file 或者 ls -lh file 编辑 这个答案是错误的,因为它也可以以 Gb/Kb 报告大小,具体取决于文件的大小。请删除赞成票。 ericslaw 2009-07-08T06:28:00+08:002009-07-08T06:28:00+08:00 我倾向于使用“du -k myfile”来获取千字节并在视觉上删除最后三位数字,但我只是在寻找近似大小。 结果证明 du 经常(总是?)有 MB 的 -m 选项。 请记住,文件的大小可能与使用的磁盘空间量略有不同,因为磁盘分配是以块而不是字节为单位的。 如果您因为磁盘空间不足而正在寻找“胖”文件,那将是一个更有启发性的问题,因为解决方案会更加多样化。 sud03r 2009-07-08T02:03:30+08:002009-07-08T02:03:30+08:00 使用 -lh 选项将为您提供人类可读形式的大小,例如,如果您的文件大小为 1025 M,它将输出 1G,否则您可以使用 ls --block-size=1024K -s 它将以最接近的整数形式给出大小(以 MB 为单位) . 如果您需要精确的值(不是四舍五入的值),您可以使用 awk: ls -l | awk '/d|-/{printf("%.3f %s\n",$5/(1024*1024),$9)}' Amandasaurus 2009-07-08T03:13:50+08:002009-07-08T03:13:50+08:00 stat可以做到这一点。 $ ls -l | grep myfile -rw------- 1 rory rory 3120 2009-07-02 16:58 myfile $ stat -c '%s' myfile 3120 以字节为单位提供给您。 您可以使用 bash 的算法来计算兆字节: $ echo $(( $( stat -c '%s' myfile ) / 1024 / 1024 )) 0 (但在这种情况下它会四舍五入) findrbot_admin 2017-07-03T16:35:32+08:002017-07-03T16:35:32+08:00 我找到了一个 AWK 1 班轮,它有一个错误,但我修复了它。我还在 TeraBytes 之后添加了 PetaBytes。 FILE_SIZE=234234 # FILESIZE IN BYTES FILE_SIZE=$(echo "${FILE_SIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }') 考虑到stat不是在每个系统上,您几乎总是可以使用 AWK 解决方案。例子; 树莓派没有stat但它有awk。 FerranB 2009-07-08T02:58:56+08:002009-07-08T02:58:56+08:00 你可以使用一个很小的 Python 脚本: $ cat ./size_in_mb.py #!/usr/local/bin/python import os import sys print os.path.getsize(sys.argv[1])/1048576 $ ls -l test.tgz -rw-r--r-- 1 root root 258330336 Jul 7 00:04 test.tgz $ ./size_in_mb.py test.tgz 246 user364461 2016-07-09T09:48:32+08:002016-07-09T09:48:32+08:00 我在另一个线程上看到了这个并且喜欢结果。在 AIX 下,我用 ls -l [filename] | awk '{$5=sprintf("%.3f GB", $5/1024^3)} 1' 产生 3 位小数的 GB 计数 示例输出 ls -l /tmp/myfile: -rw-rw-rw- 1 owner group 0.530 GB Jul 8 10:33 /tmp/myfile 如果文件小于 1 MB,您可以选择增加小数位数。上面的例子,使用 %.9f 会给出: 0.530388314 GB fitorec 2019-07-10T10:11:07+08:002019-07-10T10:11:07+08:00 试试这个例子: size=$(du file | awk '{print $1/1000}') echo "the size is ${size} MB"
如果您的
ls
支持--block-size
(例如 GNU coreutilsls
)确实如此:du -h file
或者
ls -lh file
编辑
这个答案是错误的,因为它也可以以 Gb/Kb 报告大小,具体取决于文件的大小。请删除赞成票。
我倾向于使用“du -k myfile”来获取千字节并在视觉上删除最后三位数字,但我只是在寻找近似大小。
结果证明 du 经常(总是?)有 MB 的 -m 选项。
请记住,文件的大小可能与使用的磁盘空间量略有不同,因为磁盘分配是以块而不是字节为单位的。
如果您因为磁盘空间不足而正在寻找“胖”文件,那将是一个更有启发性的问题,因为解决方案会更加多样化。
使用 -lh 选项将为您提供人类可读形式的大小,例如,如果您的文件大小为 1025 M,它将输出 1G,否则您可以使用 ls --block-size=1024K -s 它将以最接近的整数形式给出大小(以 MB 为单位) .
如果您需要精确的值(不是四舍五入的值),您可以使用 awk:
stat
可以做到这一点。以字节为单位提供给您。
您可以使用 bash 的算法来计算兆字节:
(但在这种情况下它会四舍五入)
我找到了一个 AWK 1 班轮,它有一个错误,但我修复了它。我还在 TeraBytes 之后添加了 PetaBytes。
考虑到stat不是在每个系统上,您几乎总是可以使用 AWK 解决方案。例子; 树莓派没有stat但它有awk。
你可以使用一个很小的 Python 脚本:
我在另一个线程上看到了这个并且喜欢结果。在 AIX 下,我用
产生 3 位小数的 GB 计数
示例输出
如果文件小于 1 MB,您可以选择增加小数位数。上面的例子,使用 %.9f 会给出:
试试这个例子: