Arr*_*cal 17 command-line bash scripts disk-usage
我想要一种通过使用安装分区的目录来捕获特定分区的磁盘使用情况的方法。输出应该只是一个没有填充或跟随符号的整数,因为我想将它保存在一个变量中。
我使用过df --output=pcent /mount/point
,但需要修剪输出,因为它有一个不必要的标题,值前有一个空格填充,值后面有一个 % 符号,如下所示:
Use%
83%
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想要的输出只是83
. 我不知道使用 的输出有什么缺点df
,但很高兴接受不依赖它的其他方法。
小智 20
我会用...
df --output=pcent /mount/point | tr -dc '0-9'
Run Code Online (Sandbox Code Playgroud)
不确定 sed 是否更快,但我不记得 sed 值。
这是 awk 解决方案:
$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'
37
Run Code Online (Sandbox Code Playgroud)
基本上这里发生的事情是我们将 '%' 字符视为字段分隔符(列分隔符),并且仅当记录数等于 2(NR==2
部分)时才打印第一列 $1
如果我们想使用bash
-only 工具,我们可以这样做:
bash-4.3$ df --output=pcent / | while IFS= read -r line; do
> ((c++));
> [ $c -eq 2 ] && echo "${line%\%*}" ;
> done
74
Run Code Online (Sandbox Code Playgroud)
为了好玩,sed
通过捕获组和-r
扩展正则表达式替代:
df --output=pcent | sed -nr '/[[:digit:]]/{s/[[:space:]]+([[:digit:]]+)%/\1/;p}'
Run Code Online (Sandbox Code Playgroud)
sed
解决方案
df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
Run Code Online (Sandbox Code Playgroud)
1d
删除第一行;
分隔命令s/^ //
从行首删除一个空格s/%//
移除%
标志您可以通过管道传输grep
到仅提取数字的一个:
df --output=pcent /mount/point | grep -o '[0-9]*'
Run Code Online (Sandbox Code Playgroud)
现场观看:
$ echo "Use%
> 83%" | grep -o '[0-9]*'
83
Run Code Online (Sandbox Code Playgroud)