I'm trying to output the amount of free disk space on the filesystem /example
.
If I run the command df -k /example
I can get good information about available disk space in kb but only by being human and actually looking at it.
I need to take this data and use it somewhere else in my shell script. I initially thought about using cut
but then my script wont be portable to other disks as free disk space will vary and cut will not produce accurate results.
How can I get output of just the free disk-space of example in kb?
To get the output of df
to display the data in kb you just need to use the -k
flag:
df -k
Also, if you specify a filesystem to df
, you will get the values for that specific, instead of all of them:
df -k /example
Regarding the body of your question: you want to extract the amount of free disk space on a given filesystem. This will require some processing.
Given a normal df -k
output:
$ df -k /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7223800 4270396 2586456 63% /
You can get the Available
(4th column) for example with awk
or cut
(previously piping to tr
to 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
As always, if you want to store the result in a variable, use the var=$(command)
syntax like this:
$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456
Also, from the comment by Tim Bunce you can handle long filesystem names using --direct
to get a -
instead, so that it does not print a line that breaks the engine:
$ df -k --direct /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
- 7223800 4270396 2586456 63% /