我正在尝试输出文件系统/example
上的可用磁盘空间量。
如果我运行命令df -k /example
我可以获得有关kb中的可用磁盘空间的良好信息,但只能通过人为的方式实际查看。
我需要采取这些数据,并在我的shell脚本中的其他地方使用它。 我最初考虑使用cut
但是然后我的脚本不会被移植到其他磁盘作为可用磁盘空间将有所不同,削减将不会产生准确的结果。
我怎样才能得到输出的只是kb中的例子的可用磁盘空间?
要获得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% /
你可以用awk
或cut
来获得Available
(第四列)(之前用管道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
来处理长文件系统名称-
而不是打印导致中断引擎的行:
$ df -k --direct /tmp Filesystem 1K-blocks Used Available Use% Mounted on - 7223800 4270396 2586456 63% /
您可以使用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`
仅显示有趣的列
df /example --total -k -h --output=source,avail
不完全标准(我已经看到 – 仅在Ubuntu手册页输出),在这种情况下,awk和其他只是删除列是没有必要的。