nas-junk-cleanup.sh
Clears junk / temp / leftover files to reclaim space.
Note
Live script from my home-lab server. Tokens, IDs, phone numbers and other secrets have been replaced with
placeholders like
<WHATSAPP_GROUP_ID> — everything else is the real, running code.
#!/usr/bin/env bash
set -u
MODE="${1:---dry-run}"
if [ "$MODE" != "--dry-run" ] && [ "$MODE" != "--apply" ]; then
echo "Usage: $0 [--dry-run|--apply]" >&2
exit 2
fi
REPORT_DIR=/home/lanky/reports
mkdir -p "$REPORT_DIR"
STAMP=$(date +%Y%m%d-%H%M%S)
OUT="$REPORT_DIR/nas-junk-cleanup-$STAMP.txt"
LATEST="$REPORT_DIR/nas-junk-cleanup-latest.txt"
MIN_AGE_DAYS=7
{
echo "NAS Junk Cleanup"
echo "Generated: $(date -Is)"
echo "Mode: $MODE"
echo "Policy: delete only obvious download residue from /mnt/nas older than ${MIN_AGE_DAYS} days; report-only for /mnt/jelly"
echo
for m in /mnt/nas /mnt/jelly; do
if ! mountpoint -q "$m"; then
echo "BAD: $m is not mounted; refusing to continue"
exit 1
fi
if ! timeout 10s ls -ld "$m" >/dev/null 2>&1; then
echo "BAD: $m is not responding; refusing to continue"
exit 1
fi
done
echo "== /mnt/nas deletable junk candidates =="
tmpfile=$(mktemp)
trap 'rm -f "$tmpfile"' EXIT
timeout 20m find /mnt/nas -xdev -type f -mtime +"$MIN_AGE_DAYS" \
\( -iname '*.part' -o -iname '*.partial' -o -iname '*.tmp' -o -iname '*.!qB' -o -iname '*.aria2' -o -iname '*.unwanted' -o -iname '*.bad' -o -iname '*.failed' -o -iname 'Thumbs.db' -o -iname '.DS_Store' -o -ipath '*/sample/*' -o -iname '*sample*.avi' -o -iname '*sample*.mkv' -o -iname '*sample*.mp4' \) \
-printf '%s\t%p\n' 2>/dev/null | sort -nr > "$tmpfile"
cat "$tmpfile"
count=$(wc -l < "$tmpfile")
bytes=$(awk '{s+=$1} END {printf "%.0f", s+0}' "$tmpfile")
echo
echo "Candidates: $count"
echo "Bytes: $bytes"
awk -v b="$bytes" 'BEGIN {printf "GiB: %.2f\n", b/1024/1024/1024}'
if [ "$MODE" = "--apply" ] && [ "$count" -gt 0 ]; then
echo
echo "== deleting =="
cut -f2- "$tmpfile" | while IFS= read -r path; do
case "$path" in
/mnt/nas/*)
echo "DELETE: $path"
/home/lanky/scripts/safe-recycle.py \
"definite download junk older than ${MIN_AGE_DAYS} days" \
"$path" || echo "ERROR recycling: $path"
;;
*)
echo "SKIP outside /mnt/nas: $path"
;;
esac
done
fi
echo
echo "== /mnt/jelly suspicious junk report only =="
timeout 10m find /mnt/jelly -xdev -type f \
\( -iname '*.part' -o -iname '*.partial' -o -iname '*.tmp' -o -iname '*.!qB' -o -iname '*.aria2' -o -iname '*.unwanted' -o -iname 'Thumbs.db' -o -iname '.DS_Store' -o -ipath '*/sample/*' \) \
-printf '%s\t%p\n' 2>/dev/null | sort -nr | head -500 || echo "WARN: /mnt/jelly report timed out or failed"
} > "$OUT" 2>&1
status=$?
chmod 0644 "$OUT"
cp "$OUT" "$LATEST"
echo "$OUT"
exit $status