commit 385b665343df31ec1bad53fb1ce2ff2bc0281dfa parent 3a20364f61d5d29d7c42c2b8405c69461b1fcf03 Author: Peter <peter@minskio.co.uk> Date: Wed, 30 Sep 2026 22:14:06 +0100 Buff up my old average-relative script Lemme update this https://minskio.co.uk/calculating-relative-average-subdirectory-filesizes/ while I'm at it Diffstat:
| M | machines/ilias.nix | | | 1 | + |
| A | scripts/average-relative.nix | | | 25 | +++++++++++++++++++++++++ |
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/machines/ilias.nix b/machines/ilias.nix @@ -30,6 +30,7 @@ ../common/user.nix ../common/zerotier.nix ../scripts/audiobook-cleaner.nix + ../scripts/average-relative.nix ../scripts/backup-local.nix ../scripts/blog-music.nix ../scripts/blog-sort-archives.nix diff --git a/scripts/average-relative.nix b/scripts/average-relative.nix @@ -0,0 +1,25 @@ +{ pkgs, ... }: + +let + average-relative = pkgs.writeShellScriptBin "av`erage-relative" '' + dir="${1:-.}" + if [[ ! -d "$dir" ]]; then + echo "Not a directory: $dir" >&2 + exit 1 + fi + shopt -s nullglob + for i in "$dir"/*/; do + i="${i%/}" + size=$(du -sk "$i" | awk '{print $1}') + count=$(find "$i" -type f -size +1M | wc -l) + (( count == 0 )) && continue + echo "$((size / count)) $count $size ''${i##*/}" + done | sort -nr | numfmt -d ' ' --field=1,3 --from-unit=1024 --to=iec --suffix=B | + while read -r avg count total name; do + printf '%8s %7s %8s %s\n' "$avg" "$count" "$total" "$name" + done + ''; +in +{ + environment.systemPackages = [ average-relative ]; +}