#!/bin/sh depth="-maxdepth 1" dry_run="" while [ $# -gt 0 ]; do case "$1" in -r|--recursive) depth="" ;; -n|--dry-run) dry_run=1 ;; -h|--help) echo "Usage: $(basename "$0") [-r] [-n]" echo " -r, --recursive search subdirectories too" echo " -n, --dry-run show what would be removed without deleting" exit 0 ;; *) echo "Unknown option: $1" >&2 exit 1 ;; esac shift done find . $depth -type f -exec md5sum {} + | sort | awk -v dry_run="${dry_run:-0}" ' BEGIN { first = 1; total = 0 } $1 != prev && prev != "" { count = 0 for (i = 0; i < n; i++) if (i != keep) count++ if (count > 0) { if (dry_run && !first) print "" first = 0 for (i = 0; i < n; i++) if (i != keep) print f[i] } total += count n = 0; keep = 0 } { fn = substr($0, 35) f[n++] = fn if ((fn ~ /schmeeve-AI-/ && f[keep] !~ /schmeeve-AI-/) || (fn !~ /\/ComfyUI/ && f[keep] ~ /\/ComfyUI/)) keep = n - 1 prev = $1 } END { count = 0 for (i = 0; i < n; i++) if (i != keep) count++ if (count > 0) { if (dry_run && !first) print "" for (i = 0; i < n; i++) if (i != keep) print f[i] } total += count if (dry_run) printf "Summary: %d duplicate file(s) found\n", total else printf "Removed %d duplicate file(s)\n", total > "/dev/stderr" }' | if [ -n "$dry_run" ]; then cat else while IFS= read -r f; do rm -f "$f" 2>/dev/null; done fi