使用df获取可用磁盘空间,只显示kb中的可用空间?

时间:2013-10-31 10:11:36

标签: linux bash unix cut df

我正在尝试输出文件系统/example上的可用磁盘空间量。

如果我运行命令df -k /example,我可以获得有关kb中可用磁盘空间的良好信息,但只能通过人工并实际查看它。

我需要获取此数据并将其用于我的shell脚本中的其他位置。我最初考虑使用cut,但后来我的脚本不能移植到其他磁盘,因为可用磁盘空间会有所不同,切割也不会产生准确的结果。

如何在kb中输出示例的可用磁盘空间?

5 个答案:

答案 0 :(得分:47)

要获得df的输出以kb显示数据,您只需使用-k标记:

df -k

此外,如果您将文件系统指定为df,您将获得该特定值的值,而不是所有值:

df -k /example

关于问题的正文:您想要提取给定文件系统上的可用磁盘空间量。这需要一些处理。

给出正常df -k输出:

$ df -k /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1        7223800 4270396   2586456  63% /

您可以使用Availableawk获取cut(第4列)(之前已经tr加注到squeeze-repeats-s })for spaces):

$ df -k /tmp | tail -1 | awk '{print $4}'
2586456
$ df -k /tmp | tail -1 | tr -s ' ' | cut -d' ' -f4
2586456

与往常一样,如果要将结果存储在变量中,请使用var=$(command)语法,如下所示:

$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456

此外,从comment by Tim Bunce开始,您可以使用--direct处理长文件系统名称来获取-,这样它就不会打印出破坏引擎的行:

$ df -k --direct /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
-                7223800 4270396   2586456  63% /

答案 1 :(得分:12)

您可以使用stat(2)命令显示空闲块,也可以查看每个块的大小,例如。

stat -f --printf="%a %s\n" /

将显示给定文件系统上的空闲块数(%a)(/),后跟块大小(%s)。要获得以kB为单位的大小,可以使用bc(1)命令,如以下示例所示:

stat -f --printf="%a * %s / 1024\n" / | bc

最后,将它放入变量只是使用反引号替换(或第一个答案中的$()):

SOMEVAR=`stat -f --printf="%a * %s / 1024\n" / | bc`

答案 2 :(得分:8)

仅显示有趣的列

 df /example --total -k -h  --output=source,avail
  • - 总计=最后的总计
  • -k =块大小1K
  • -h =人类可读
  • - 输出= [FIELD_LIST]列列表以“,”
  • 分隔

不完全标准(我在Ubuntu手册页中看到了--output),在这种情况下,awk和其他只是删除列是没有必要的。

答案 3 :(得分:1)

这是另一种解决方案:

df --output=avail -m /example | tail -1

输出:

  

6415

答案 4 :(得分:0)

我创建了一个小脚本,它将获取文件系统已用空间,并将以 GB 为单位转换总已用空间大小。

df -Th | grep -vE "tmpfs|nfs|boot|overlay|vfat|cifs"| awk '{print $4}'|sed 's/.$//'| grep -vw "^Use"| paste -s -d+|bc