用于找出磁盘空间差异的脚本

时间:2017-06-09 19:31:46

标签: python linux bash shell

我有一个显示磁盘使用量输出的Linux命令

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       2.8T  1.1T  1.7T  39% /data/disk2
/dev/sdc1       2.8T  1.1T  1.7T  41% /data/disk3
/dev/sdd1       2.8T  1.1T  1.7T  40% /data/disk4

我需要帮助,在脚本(Python或Bash)中继续这个,让我知道磁盘是否相互之间的差异超过5%。如果它们超过5%不平衡,我会编写代码来通过电子邮件发送结果。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

这个怎么样:

import re

s = """
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       2.8T  1.1T  1.7T  39% /data/disk2
/dev/sdc1       2.8T  1.1T  1.7T  41% /data/disk3
/dev/sdd1       2.8T  1.1T  1.7T  40% /data/disk4
"""

regex = re.compile(r'\d{1,2}%')

result = [int(a[:-1]) for a in regex.findall(s)]
# [39, 41, 40]

如果你想在最后比较它们......

if max(result) - min(result) > 5:
    print("Imbalanced!")
else:
    print("Balanced!")

当然,你可以调用os-level函数并得到它们的输出:

command_output = subprocess.check_output(['df', '-h']).decode('utf-8')

答案 1 :(得分:1)

也可以使用awk

df | awk '\
    BEGIN { \
        max=0; \
        min=2000; \
    } \
    NR>1 { \
      pf = $5; \
      sub( /\%/, "", pf ); \
      pf = pf + 0; \
      if ( pf > max ) max = pf; \
      if ( pf < min ) min = pf; \
    } \
    END { \
      diff = ( max - min ); \
      print diff \
    }'

答案 2 :(得分:1)

awk 解决方案:

df -h | awk 'NR>1{ a[NR-1]=substr($5,1,length($5)-1) }
        END{ asort(a); print ((a[length(a)]-a[1]) > 5? "Not good!" : "Good!") }'

输出(输入):

Good!