captura o nome do volume dos volumes acima de 85%

3

Eu quero da saída abaixo pegar todos os nomes de volume com capacidade acima de 85%. Eu sei que não há um neste exemplo, mas vamos fingir que existe. :)

Filesystem               total       used      avail capacity  Mounted on
/vol/mc3240a/            190GB       18GB      171GB      10%  /vol/mc3240a/
/vol/mc3240a/.snapshot       10GB      355MB     9884MB       3%  /vol/mc3240a/.snapshot
/vol/mc3240b_root_backup/      210GB     9019MB      201GB       4%  /vol/mc3240b_root_backup/
/vol/mc3240b_root_backup/.snapshot        0MB     1691MB        0MB     ---%  /vol/mc3240b_root_backup/.snapshot
    
por Jocke 18.02.2014 / 13:36

4 respostas

2
df -h | egrep "(8[5-9]|9[0-9]|100)%" | cut -f 1 -d " "
  • Isso vai pegar 85% até 100% (o 0, faz o {1} 00%)
  • O corte mostrará a primeira coluna (qualquer coisa depois que o primeiro espaço na saída for excluído; um dispositivo não pode ter um espaço)

Exemplos:

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             139G  132G  218M 100% /
varrun                2.0G  368K  2.0G   1% /var/run
varlock               2.0G     0  2.0G   0% /var/lock
udev                  2.0G   48K  2.0G   1% /dev
devshm                2.0G     0  2.0G   0% /dev/shm

$ df -h | egrep "(8[5-9]|9[0-9]|100)%" | cut -f 1 -d " "
/dev/sda1

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             144G  130G  7.5G  95% /
varrun                506M  148K  506M   1% /var/run
varlock               506M  4.0K  506M   1% /var/lock
udev                  506M   72K  506M   1% /dev
devshm                506M     0  506M   0% /dev/shm
$ df -h | egrep "(8[5-9]|9[0-9]|100)%" | cut -f 1 -d " "
/dev/sda1
    
por Rinzwind 18.02.2014 / 13:58
2

Tente isso (coloque-o em um script, torne-o executável):

#!/bin/bash

DF_BIN='/bin/df'

DF_OUT='${DF_BIN}'

tring='first line
second line
third line'

oldIFS="$IFS"   # store old IFS value
IFS='
'
IFS=${IFS:0:1} # tab formatting
lines=( $DF_OUT )

IFS=', '

COUNTER=0
for line in "${lines[@]}"
    do
        if [  $COUNTER -gt 0 ]; then    # strip first line
            fields=( $line )
            if [[ ${fields[4]} =~ (8[5-9]|[9][0-9]|100)%$ ]]; then
                echo "==> $line"
            fi
        fi
        let COUNTER=COUNTER+1 
done

IFS="$oldIFS"

exit 0

Não tão curto quanto as respostas acima, mas ele pega 85% a 100% na linha direita ...

ou: SHORT de uma linha:

df -hx tmpfs -x devtmpfs | egrep '(8[5-9]|9[0-9]|100)%'

(editado versão Wilfs) como a solução do outro, mas usando egrep com alternativas)

    
por Wolfgang 18.02.2014 / 14:07
2

Como os outros, mas em um script para ter certeza de que tudo está sendo usado:

#!/bin/bash
#For 85% to 89%, and 95& to 99%
df -hx tmpfs -x devtmpfs | egrep '[8-9][5-9]%'
#To find if anything is 90%-94%
df -hx tmpfs -x devtmpfs | egrep '9[0-4]%'
#To find if anything is 100%
df -hx tmpfs -x devtmpfs | egrep '100%'

Exemplo de entrada ( tmpfs etc. filtrada):

wilf@comp:~$ df -hx tmpfs -x devtmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        96G   21G   71G  23% /
/dev/sda3        58G   43G   12G  79% /home
/dev/sda5       357G  335G  4.2G  99% /run/media/wilf/Storage
/dev/sda6        27G   19G  6.8G  74% /run/media/wilf/433b971a

Exemplo de saída - com o nome da unidade com outras coisas, pois não as filtrei:

wilf@comp:~$ ./testScript
/dev/sda5       357G  335G  4.2G  99% /run/media/wilf/Storage

Baseado no @wolfgang, isso deve imprimir apenas o nome da unidade sem o /vol :

df -hx tmpfs -x devtmpfs | egrep '(8[5-9]|9[0-9]|100)%' | cut -f 1 -d " " | sed -e 's/\/vol\///g'
    
por Wilf 18.02.2014 / 14:05
1

Suponha que você esteja usando o commnad, digamos xyz para obter essa saída, então

xyz | grep "[8-9][5-9]%"

deve fornecer uma saída adequada

    
por Null pointer 18.02.2014 / 13:49

Tags