Who*_*ppa 27 unix linux bash cut linux-disk-free
我正在尝试输出文件系统上的可用磁盘空间量/example.
如果我运行命令,df -k /example我可以获得有关kb中可用磁盘空间的良好信息,但只能通过人工并实际查看它.
我需要获取此数据并在我的shell脚本中的其他位置使用它.我最初想过使用cut但是我的脚本不能移植到其他磁盘,因为可用磁盘空间会有所不同,切割也不会产生准确的结果.
如何在kb中获得示例的可用磁盘空间的输出?
fed*_*qui 49
要获得df以kb显示数据的输出,您只需使用-k标志:
df -k
Run Code Online (Sandbox Code Playgroud)
此外,如果您指定了一个文件系统df,您将获得该特定的值,而不是所有这些值:
df -k /example
Run Code Online (Sandbox Code Playgroud)
关于问题的主体:您想要提取给定文件系统上的可用磁盘空间量.这将需要一些处理.
给定正常df -k输出:
$ df -k /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7223800 4270396 2586456 63% /
Run Code Online (Sandbox Code Playgroud)
你可以得到Available(第4列)例如awk或cut(先前管道tr到squeeze-repeats(-s为空格)):
$ df -k /tmp | tail -1 | awk '{print $4}'
2586456
$ df -k /tmp | tail -1 | tr -s ' ' | cut -d' ' -f4
2586456
Run Code Online (Sandbox Code Playgroud)
与往常一样,如果要将结果存储在变量中,请使用如下var=$(command)语法:
$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456
Run Code Online (Sandbox Code Playgroud)
此外,根据Tim Bunce的评论,您可以使用--direct来获取长文件系统名称-,以便它不会打印一个破坏引擎的行:
$ df -k --direct /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
- 7223800 4270396 2586456 63% /
Run Code Online (Sandbox Code Playgroud)
小智 12
您可以使用stat(2)命令显示空闲块,也可以查看每个块的大小,例如
stat -f --printf="%a %s\n" /
Run Code Online (Sandbox Code Playgroud)
将显示给定文件系统上的空闲块数(%a)(/),后跟块大小(%s).要获得以kB为单位的大小,可以使用bc(1)命令,如以下示例所示:
stat -f --printf="%a * %s / 1024\n" / | bc
Run Code Online (Sandbox Code Playgroud)
最后,将它放入变量只是使用反引号替换(或第一个答案中的$()):
SOMEVAR=`stat -f --printf="%a * %s / 1024\n" / | bc`
Run Code Online (Sandbox Code Playgroud)
仅显示有趣的列
df /example --total -k -h --output=source,avail
Run Code Online (Sandbox Code Playgroud)
不完全标准(我在Ubuntu手册页中看到--output),在这种情况下,Awk和其他只是删除列是没有必要的.
小智 8
这是另一种解决方案:
df --output=avail -m /example | tail -1
Run Code Online (Sandbox Code Playgroud)
输出:
6415