我的桌面上有一个小部件,它显示“垃圾箱”中文件的当前大小。小部件的代码如下:
du -ch ~/.Trash | grep total | cut -c 1-5
这会给我类似的东西:“99M”。但我想显示“99 MB”(分别为 KB、GB)。您能否帮我用正确的字符串替换代码以获得此结果(另请注意“99”和“MB”之间的空格)?提前致谢!
PS:我使用Mac OS X 10.11.6。
答案1
使用-s
( --summarize
) 选项仅显示总大小值:
du -sh | sed 's/^\([0-9]*\)\([^B]\).*/\1 \2B/'
([0-9]*\)
- 捕获总大小值([^B]\)
- 捕获单位缩短值,除了B
(字节,保持原样)
答案2
您可以使用 tr 清除尾随空格,并将“B”将其包裹在 echo 命令中:
echo "$(du -ch ~ | grep total | cut -c 1-5 | tr -d '[:blank:]')B" | sed 's/\(K\|M\|G\)B/ \1B/'
要不就sed它 :)
du -ch ~ | grep total | cut -c 1-5 | sed 's/\s\+$/B/' | sed 's/\(K\|M\|G\)B/ \1B/'
编辑0: 没有注意到单元之前的空间,最后添加了 sed 来完成这项工作
答案3
我发现,当大小在 10 K 到 99 K 之间(例如 42 K)时,输出的前五个字符是
4
2
K
(标签)/
(假设路径名参数以
/
— 开头,如果您指定以 开头的参数,那么就会如此~
)。这将是cut -c 1-5
:的输出42K /
。 (我认为nnM
和都会有同样的问题。)使用来获得第一个nnG
更有意义cut -f1
场地输出的字符,而不是前五个字符。- 如果您的目录名称包含单词 ,会发生什么情况
total
?提示:它将通过grep
.与其df
为每个子目录生成数据然后将grep
其丢弃,不如df
只生成总数更有意义。作为罗曼·佩雷克雷斯特指出,您可以通过指定-s
选项来做到这一点。 作为dmgnx 指出,一旦您获得了号码(以
K
,M
或结尾G
),您所需要做的就是附加B
.所以我的复合解决方案是echo "$(du -sh ~/.Trash | cut -f1)B"
哎呀!我没有注意到您想在数字和单位之间添加空格。好的,那么你确实需要
sed
(或类似的东西):du -sh ~/.Trash | cut -f1 | sed 's/[KMG]$/ &B/'
或者也许只是
du -sh ~/.Trash | sed 's/^\([0-9.]*\)\([KMG]\).*$/\1 \2B/'
(用于
sed
丢弃目录名称,并cut
完全消除)。
答案4
强行蛮横:
du -ch ~/.Trash | grep total | cut -c 1-5 |
sed -e 's/K$/ KB/; s/M$/ MB/; s/G$/ GB/'