✨ larger-than: check if PATHS is larger than THRESHOLD
parent
bea0e112ae
commit
0f8c9c5b68
@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
|
||||||
|
import click
|
||||||
|
|
||||||
|
|
||||||
|
def du(paths):
|
||||||
|
# Just using coreutils du, to have deduping, and the correct size
|
||||||
|
result = subprocess.check_output(["du", "-sc", "--block-size=1", *paths])
|
||||||
|
total_line = result.splitlines()[-1]
|
||||||
|
total_bytes, total_check = total_line.split(b"\t")
|
||||||
|
assert total_check == b"total"
|
||||||
|
return int(total_bytes)
|
||||||
|
|
||||||
|
|
||||||
|
def interpret_prefixes(number, si=False):
|
||||||
|
# prefix as the "K" in "KB"
|
||||||
|
multiplier = 1000 if si else 1024
|
||||||
|
|
||||||
|
if m := re.match(r"^(?i:(\d+)([kmg])?)", number):
|
||||||
|
number, prefix = m.groups()
|
||||||
|
else:
|
||||||
|
raise ValueError("Can't interpret size")
|
||||||
|
|
||||||
|
number = int(number)
|
||||||
|
if prefix is not None:
|
||||||
|
prefix = prefix.lower()
|
||||||
|
|
||||||
|
exponent = {
|
||||||
|
None: 0,
|
||||||
|
"k": 1,
|
||||||
|
"m": 2,
|
||||||
|
"g": 3,
|
||||||
|
"t": 4,
|
||||||
|
}
|
||||||
|
return number * multiplier ** exponent[prefix]
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
@click.argument("threshold")
|
||||||
|
@click.argument("paths", nargs=-1)
|
||||||
|
def larger_than(threshold, paths):
|
||||||
|
"""Check if disk usage of PATHS is larger than THRESHOLD"""
|
||||||
|
threshold = interpret_prefixes(threshold)
|
||||||
|
if du(paths) > threshold:
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
larger_than()
|
Loading…
Reference in New Issue