[英]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
以字节为单位报告大小,然后使用perl
, awk
进行数学运算。
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.