Команда оболочки для расчета определенного% размера диска


0

Я пишу сценарий оболочки, чтобы вычислить 15% от общего размера диска домашнего каталога пользователя. У меня есть эта команда, которая дает мне (что-то) то, что я хочу, но не уверен, что есть лучший способ сделать это.

df -hT /home/user1 | grep -vE '^Filesystem' | awk '{ print $2 }'

эта команда выводит:

<blank line>

516G

Как мне извлечь 516 мой вопрос, если эта команда правильный способ сделать это.

shell 

Ответы:


1

Еще один способ сделать это awkбез grep:

df -hT /home/user | awk '$1 ~ "sda1"{gsub(/[A-Z]/,"",$4); print $4}'

Тест на передней панели блока awk $1~"sda1"просто проверяет, является ли ваш основной жесткий диск тем, на который dfон смотрит. Это намного безопаснее, чем захват dfзаписей, которые не содержат, filesystemкоторые могут выплеснуть больше, чем просто ваш основной диск, если вы вставите другой диск в коробку или подключите несколько дисков NFS.

gsub(/[A-Z]/, "", $4)просто заменяет любые заглавные буквы $4(размер диска) ни на что "". Этого должно быть достаточно, поскольку, как мне кажется, все суффиксы размера диска (K, M, G и т. Д.) Являются заглавными буквами. После этого мы печатаем новое и улучшенное $4.


1
  • Используйте, $2+0чтобы сделать это число в awk.
  • Вам не нужно, так grepкак вы можете выполнять поиск awkсам по себе.

Ты можешь использовать:

df -hT / |  awk '/^Filesystem/{ print ($2+0) * 15/100 }'

1

Я бы посоветовал вместо того, чтобы пытаться удалить «G», вместо этого указать размер блока. Это гарантирует, что вам не придется иметь дело со сложностью возврата что-то вроде M или K :

df -BG /home/user1 | awk 'NR==2 { print $3 * 0.15 }'

Возможно, лучше использовать -B1, а затем сделать версию для печати вручную:

df -B1 /home/user1 | awk 'NR==2 { split("K M G T P E", s); for(n=int($3*0.15); n>1024; n=rshift(n,10)) i++; print n s[i] }'

Вышеуказанное должно быть применимо для (GNU coreutils) версий 8.12 и 8.25 df.

dfВыход содержит информацию о разделе , что данный каталог использует ... который может хорошо работать , если каждый из ваших пользователей украсила с разделом своих собственных. Тем не менее, в крупных организациях, более вероятно, что quotaони используются в каталогах ваших пользователей. Пожалуйста, обратитесь к manстраницам для quota(и друзей), если это так.


спасибо Майкл, это сработало для меня. df -BG / home / user1 | awk 'NR == 3 {print $ 1 * 0.15}'

@Manth - Как у вас получилось NR == 3 в вашем случае? Может быть, я должен посмотреть, могу ли я улучшить свой ответ? Причина, по которой я использовал NR == 2, заключается в том, что в моем случае заголовок находится в строке 1, а следующая строка является выводом ... есть ли у вас какие-либо сообщения, отображаемые в строке 2? Как же у вас работал 1 доллар? Я использую "df (GNU coreutils) 8.12" и "df (GNU coreutils) 8.25" из suse и ubuntu (соответственно).
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.