Como posso criar uma variável apenas para o tamanho, usado e disponível de df?

1

Digamos que eu queira criar variáveis, uma para cada tamanho, usadas e disponíveis ao usar df. Como posso criar variáveis para cada um? Existe uma opção que retorna apenas uma dessas coisas?

directorySize=

directoryUsed=

directoryAvailable=

Digamos que eu queira criar essas variáveis com base no diretório inicial. Como eu faria isso?

    
por John 18.11.2013 / 00:39

1 resposta

2

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))
    
por 18.11.2013 / 00:47

Tags