33

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

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

我需要获取这些数据并在我的 shell 脚本中的其他地方使用它。我最初考虑使用cut,但后来我的脚本不能移植到其他磁盘,因为可用磁盘空间会有所不同,并且 cut 不会产生准确的结果。

如何仅以 kb 为单位获取示例的可用磁盘空间的输出?

4

5 回答 5

61

要获得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% /

例如,您可以获得Available(第 4 列)awkcut(以前管道到tr( squeeze-repeats)-s用于空格):

$ 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

此外,从Tim Bunce 的评论中,--direct您可以使用to get a来处理长文件系统名称-,这样它就不会打印破坏引擎的行:

$ df -k --direct /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
-                7223800 4270396   2586456  63% /
于 2013-10-31T10:13:11.633 回答
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`
于 2014-12-29T13:48:36.973 回答
9

这是另一种解决方案:

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

输出:

6415

于 2018-01-29T22:17:57.073 回答
8

仅显示有趣的列

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

不完全标准(我只在 Ubuntu 手册页中看到过 --output),在这种情况下,不需要 Awk 和其他仅删除列的方法。

于 2015-03-31T17:30:39.083 回答
0

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

df -Th | grep -vE "tmpfs|nfs|boot|overlay|vfat|cifs"| awk '{print $4}'|sed 's/.$//'| grep -vw "^使用"| 粘贴 -s -d+|bc
于 2021-01-07T16:20:37.503 回答