Відповіді:
Вихід може бути полегшений для розбору за допомогою -P
параметра, який забезпечить:
- Інформація про кожну файлову систему завжди друкується точно в одному рядку; пристрій кріплення ніколи не ставиться на лінію самостійно. Це означає, що якщо назва пристрою монтування довше 20 символів (наприклад, для деяких мережевих кріплень), стовпці нерівні.
Це набагато простіше отримати просто вільне місце:
$ df -Ph . | tail -1 | awk '{print $4}'
( -h
використовує мегабайти, гігабайти тощо). Якщо у вашій системі немає, використовуйте -k
лише для кілобайт.)
Якщо ми пройдемо df
шлях, він повернеться лише 2 ряди: рядок заголовка, а потім дані про файлову систему, яка містить шлях. Ми можемо використовувати хвіст, щоб схопити лише другий ряд. Ми знаємо, що доступний простір знаходиться у 4-му стовпці, тому ми захоплюємо це awk
. Це все можна зробити за допомогою awk
:
$ df -Ph . | awk 'NR==2 {print $4}'
або багато інших наборів фільтрів .
$PWD
замість заміни команд та усуваючи необхідність хвоста: df -Ph $PWD | awk 'NR==2{print $4}'
awk
це краще. Я включив більш довгу команду, тому що хотів мати приклад того, як можна побудувати ланцюжок простих команд, щоб зробити щось складніше. Я оновив відповідь, щоб включити ваше вдосконалення.
-P
є стандартним ( P
призначено для POSIX). Але -h
це розширення GNU (також існує в деяких інших системах, але, наприклад, на OpenBSD воно не сумісне -P
).
df -h --output=avail . | tail -1
time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }
) не виявляє значущої різниці в швидкості, що не дивно - виклик tail
не є дорогим, і awk
його можна буде пропустити, щоб пропустити до кінця введення ... Можливо, була різниця на PDP-11 ...
А як робити df -h .
. Це дасть вам вільний простір розділу, в якому знаходиться ваш поточний робочий каталог.
Невеликий приклад:
/usr/local/nagios/libexec # df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lvol1
9.9G 6.1G 3.4G 65% /
У байтах:
df --output=avail -B 1 "$PWD" | tail -n 1
Людина, читана:
df --output=avail -h "$PWD" | tail -n 1
або
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --to="iec"
або
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
du -h
?