Ram*_*hna 5 shell freebsd linux-disk-free
我正在尝试收集有关不同服务器上剩余空间量的信息.所以当我执行时,df -k我得到输出为:
Filesystem 1024-blocks Used Avail Capacity Mounted on
/dev/ad1s1f 125925198 2568970 113282214 2% /builds
Run Code Online (Sandbox Code Playgroud)
有时输出如下:
Filesystem 1K-blocks Used Available Use% Mounted on
10.102.1.123:/storage/disk1/build
10735331328 10597534720 137796608 99% /buildbackup
Run Code Online (Sandbox Code Playgroud)
现在我想获取可用磁盘空间的数据.因此,请告诉我如何从特定列中获取数据.
fed*_*qui 10
你可以举例说:
df --output=source,avail
Run Code Online (Sandbox Code Playgroud)
或者如Tim Bunce评论的那样,您可以使用--direct以防止长文件系统名称将行拆分为两个.这将显示文件系统-.
来自man df:
--output [= FIELD_LIST]
使用FIELD_LIST定义的输出格式,或者如果省略FIELD_LIST,则打印所有字段.
...
FIELD_LIST是要包含的以逗号分隔的列列表.有效字段名称为:'source','fstype','itotal','iused','iavail','ipcent','size','used','avail','pcent'和'target'(请参阅信息页面).
- 直接
显示文件的统计信息而不是安装点
$ df --output=source,avail
Filesystem Avail
/dev/sda7 321675536
Run Code Online (Sandbox Code Playgroud)
fedorqui的解决方案更清洁,但仅适用于df
更通用的方法是使用sed 's/ \+/ /g'or 将多个空格折叠到单个空格tr -s ' ',然后使用cut空格作为分隔符:cut -d" " -f 4
所以命令是:
df -k | tr -s ' ' | cut -d" " -f 4
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
Available
26027952
854220
68376208
Run Code Online (Sandbox Code Playgroud)
相同的方法适用于将数据输出到列的其他命令.例如,ls -l | tr -s ' ' | cut -d" " -f 6,7,8
将打印时间列ls -l:
Dec 30 17:46
Mar 1 15:33
Mar 1 14:58
Mar 2 00:00
Jan 5 14:20
Mar 1 15:33
Feb 26 11:57
Feb 4 11:11
Mar 1 14:57
Run Code Online (Sandbox Code Playgroud)