tes*_*787 4 disk-usage shell-script
如何修改df -h命令以添加以下命令的结果(换句话说,将它们加在一起并返回结果)?
$ df -h | awk '{print $2}'
Size
5.8G
64G
93M
3.9G
12G
108G
16G
134G
3.7T
3.7T
6.0T
Run Code Online (Sandbox Code Playgroud)
数字的人类可读格式会妨碍您,因此您首先需要获得一致的输出。便携,您可以使用-P选项以 1024 块为单位输出
df -P | awk 'NR>2{sum+=$2}END{print sum}'
Run Code Online (Sandbox Code Playgroud)
如果您使用 GNU,df您可以指定--blocksize选项:
df --block-size=1 | awk 'NR>2{sum+=$2}END{print sum}'
Run Code Online (Sandbox Code Playgroud)
NR>2部分是避免处理Size标题行。至于将数据格式化回人类可读的格式,如果您在 Linux 上,您可以使用numfmt工具,否则 - 在awk. 请参阅相关答案。
另请注意df,所有文件系统的输出大小,包括虚拟文件系统,例如udev和tmpfs。如果您只想要实际的物理磁盘,您可以考虑将它们过滤掉。因此,如果我们只考虑在/dev/文件系统中表示设备文件的文件系统,您可能会使用以下内容:
df -P | awk 'NR>2 && /^\/dev\//{sum+=$2}END{print sum}'
Run Code Online (Sandbox Code Playgroud)
对于 GNU,df您也可以考虑使用--local标志来忽略删除文件系统。
GNUdf可以自己完成总计,最近的版本(至少从 8.21 开始,不确定旧版本)让您选择要输出的字段,因此:
$ df -h --output=size --total
Size
971M
200M
18G
997M
5.0M
997M
82M
84M
84M
200M
22G
$ df -h --output=size --total | awk 'END {print $1}'
22G
Run Code Online (Sandbox Code Playgroud)
来自man df:
--output[=FIELD_LIST]
use the output format defined by FIELD_LIST, or print all fields
if FIELD_LIST is omitted.
--total
elide all entries insignificant to available space, and produce
a grand total
Run Code Online (Sandbox Code Playgroud)