Отримайте вільний простір, наявний у поточному каталозі в Bash


25

Я знаю df -hі це pwd, але це здається трохи складним для частини, що відповідає регулярному вираженню. Будь-які ідеї?


1
Ви мали на увазі du -h?
jweyrich

Відповіді:


45

Вихід може бути полегшений для розбору за допомогою -Pпараметра, який забезпечить:

  1. Інформація про кожну файлову систему завжди друкується точно в одному рядку; пристрій кріплення ніколи не ставиться на лінію самостійно. Це означає, що якщо назва пристрою монтування довше 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}'
SiegeX

@SiegeX: Я погоджуюся робити все awkце краще. Я включив більш довгу команду, тому що хотів мати приклад того, як можна побудувати ланцюжок простих команд, щоб зробити щось складніше. Я оновив відповідь, щоб включити ваше вдосконалення.
Стівен Д

-Pє стандартним ( Pпризначено для POSIX). Але -hце розширення GNU (також існує в деяких інших системах, але, наприклад, на OpenBSD воно не сумісне -P).
Жил 'ТАК - перестань бути злим'

Це можна зробити без використання за допомогою перемикача --output = avail: df -h --output=avail . | tail -1
Floyd

Msgstr "Ви можете оптимізувати свою команду". Не зовсім. Запуск обох труб 10 000 разів (як в time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done } ) не виявляє значущої різниці в швидкості, що не дивно - виклик tailне є дорогим, і awkйого можна буде пропустити, щоб пропустити до кінця введення ... Можливо, була різниця на PDP-11 ...
Девід Тонхофер

10

А як робити 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% /

4

У байтах:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.