Как создать переменную только для размера, используемого и доступного для df?

Предположим, что я хочу создавать переменные, по одному на каждый размер, используемый и доступный при использовании df. Как я могу создавать переменные для каждого? Есть ли опция, которая возвращает только одну из этих вещей?

directorySize= directoryUsed= directoryAvailable= 

Скажем, я хочу создать эти переменные на основе домашнего каталога. Как мне это сделать?

  • ext4 используемое пространство (не -m опция, не удаленные файлы)
  • В чем разница между fdisk -l и df -h?
  • du на ramdisk отображает на 3GB меньше, чем df
  • Как определить оставшееся пространство на изолированном разделе из командной строки
  • Получить имя и использование файловой системы с помощью `df -h`
  • awk конкретный столбец с неожиданным разрывом строки
  • уменьшение «количества зарезервированных блоков» не отображается в выводе df
  • Почему lvextend выделяет меньше указанного пространства?
  • One Solution collect form web for “Как создать переменную только для размера, используемого и доступного для df?”

    Нет возможности просто вернуть одно поле. Однако опция -P гарантирует, что все поля будут напечатаны в одной строке (без этой опции, если первый столбец слишком широк, остальные будут перенесены на следующую строку). Затем вы можете использовать awk для печати нужного столбца со второй строки.

     size=$(df -Pk ~ | awk 'NR==2 {print $2}') # in kB 

    Чтобы сразу установить все переменные, вы можете сделать awk распечатать фрагмент оболочки.

     eval "$(df -Pk ~ | awk 'NR==2 {printf "size=%d used=%d available=%d", $2, $3, $4}')" 

    Несколько экзотических систем допускают пробелы в ярлыках файловой системы, что делает невозможным надежный синтаксический анализ вывода df . К сожалению, нет другого портативного способа.

    Только в Linux вы можете использовать команду stat . Это немного неуклюжие, размеры выражены в блоках.

     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)) 
    Linux и Unix - лучшая ОС в мире.