繁体   English   中英

bash du,字节大小(以十进制表示)精确到千分之一

[英]bash du with byte size in decimals to the nearest thousandth

在BASH中是否可以用十进制显示的字节大小执行“ du ”命令。

例如,说我有以下文件(数字以字节为单位):

12345 file1
2345 file2
6491 file3

我想在linux中执行“ du ”命令,而不是输出以下内容:

12.3 file1
2.3 file2
6.5 file3

注意:“ -h ”标志不起作用。

您应该可以使用awk来完成此操作,例如:

du -b * | awk '{printf "%10.1f %s\n", $1/1000, $2}'

如以下成绩单所示:

pax> ls -l
total 3092
-rwxrwxrwx  1 pax   pax       807 2008-09-14 08:26 combo.pl*
-rwxrwxrwx  1 pax   pax       236 2008-09-14 08:26 match.pl*
-rwxrwxrwx  1 pax   pax       754 2008-09-14 08:26 mkdb.pl*
-rwxrwxrwx  1 pax   pax       689 2008-09-14 08:26 nine.pl*
-rwxrwxrwx  1 pax   pax   2089522 2008-05-25 21:06 words.db*
-rwxrwxrwx  1 pax   pax   1044761 2008-05-25 21:06 words.txt*

pax> du -b *
807       combo.pl
236       match.pl
754       mkdb.pl
689       nine.pl
2089522   words.db
1044761   words.txt

pax> du -b * | awk '{printf "%10.1f %s\n", $1/1000, $2}'
       0.8 combo.pl
       0.2 match.pl
       0.8 mkdb.pl
       0.7 nine.pl
    2089.5 words.db
    1044.8 words.txt

您可以使用du -k标志以千字节为单位进行报告吗?

在Linux上,一种替代方法是不使用du ,而是使用find以字节为单位报告大小,然后使用perlawk进行数学运算。

du报告磁盘使用情况,因此它包括目录条目的大小。 如果您只想要实际文件的大小, find将为您提供。

find . -type f -printf "%s %p\n" | perl -pe 's|^(\d+)(.*)|sprintf("%10.1f", $1/1000).$2|e;'

如果只希望文件大小的总和:

find . -type f -printf "%s\n" | perl -ne '$s+=$_; END{printf "%-10.1f\n", $s/1000}'

您可以尝试以下方法:

du --apparent --block-size=100 | sed -r 's/^([0-9]*)([0-9])/\1.\2/'

这告诉du以100字节为单位报告大小,然后我使用sed在最后一位之前添加小数位。

不,不是用du孤单。 您需要使用-b参数来获得最佳精度,然后进行数学运算。

在GNU du如果-k无法帮助(块大小= 1024字节),则可以使用--si ,它类似于-h (1024),但是报告到最近的千分之一(1000),例如

du -k --si some/folder
8.2k    foo
4.1k    bar

或者,每行手动计算:

du -b * | awk '{"echo "$1"/1000 | bc" | getline size; print size" "$2}'

要自定义bc scale,请添加scale=1;前缀scale=1; ,例如

$ bc <<<"scale=2;1234/1000"
1.23

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM