Não há opção para apenas retornar um campo. No entanto, a opção -P
garante que todos os campos sejam impressos na mesma linha (sem essa opção, se a primeira coluna for muito ampla, os outros serão deslocados para a próxima linha). Você pode usar o awk para imprimir a coluna desejada na segunda linha.
size=$(df -Pk ~ | awk 'NR==2 {print $2}') # in kB
Para definir todas as variáveis de uma só vez, você pode fazer o awk imprimir um fragmento de shell.
eval "$(df -Pk ~ | awk 'NR==2 {printf "size=%d used=%d available=%d", $2, $3, $4}')"
Alguns sistemas exóticos permitem espaços nos rótulos do sistema de arquivos, o que torna impossível a análise confiável da saída df
. Infelizmente, não há outro caminho portátil.
Somente no Linux, você pode usar o comando stat
. Isso é um pouco desajeitado, os tamanhos são expressos em blocos.
block_size=$(stat -f -c %S ~)
total_blocks=$(stat -f -c %b ~)
free_blocks=$(stat -f -c %f ~)
size=$((block_size * total_blocks)) # in bytes
available=$((block_size * free_blocks))
used=$((size - available))