繁体   English   中英

找出磁盘空间差异的脚本

[英]Script to figure out the difference in disk space

我有一个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%,我将编写代码通过电子邮件发送结果。 任何帮助,将不胜感激。

这个怎么样:

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级函数并获取其输出,如下所示:

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

也可以使用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 \
    }'

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!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM