1 files changed,
62 insertions(+),
0 deletions(-)
Author:
Oleksandr Smirnov
olexsmir@gmail.com
Committed at:
2026-06-05 23:31:12 +0300
Authored at:
2026-06-05 23:30:00 +0300
Change ID:
uqlnnsoullpoqqlollyzlpwztzwwrmuq
Parent:
dee3c28
A
prune.sh
ยทยทยท 1 +#!/usr/bin/env bash 2 +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 3 +source "$CURRENT_DIR/helpers.sh" 4 + 5 +set -euo pipefail 6 + 7 +DAYS=7 8 + 9 +DIR="$(get_opt_dir)" 10 +cd "$DIR" 11 + 12 +CUTOFF=$(date -d "$DAYS days ago" +%Y%m%dT%H%M%S) 13 + 14 +# Build set of active session names (those with a _last symlink) 15 +declare -A ACTIVE 16 +for l in *_last; do 17 + [ -L "$l" ] || continue 18 + ACTIVE["${l%_last}"]=1 19 +done 20 + 21 +DELETED=0 22 +FIXED=0 23 + 24 +for f in *_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]; do 25 + [ -f "$f" ] || continue 26 + name="${f%_*}" 27 + ts="${f##*_}" 28 + 29 + if [[ -v ACTIVE["$name"] ]]; then 30 + # Active session: keep the _last target always, prune old others 31 + target="$(readlink "$name"_last 2>/dev/null || true)" 32 + if [ "$f" = "$target" ]; then continue; fi # always keep the _last target 33 + if [[ "$ts" < "$CUTOFF" ]]; then 34 + rm "$f" 35 + echo "pruned: $f" 36 + DELETED=$((DELETED + 1)) 37 + fi 38 + else 39 + # Orphaned session: delete everything 40 + rm "$f" 41 + echo "pruned (orphan): $f" 42 + DELETED=$((DELETED + 1)) 43 + fi 44 +done 45 + 46 +# Clean dangling _last symlinks (target was deleted) 47 +for l in *_last; do 48 + [ -L "$l" ] || continue 49 + [ -e "$l" ] && continue 50 + rm "$l" 51 + echo "cleaned: $l (broken symlink)" 52 + FIXED=$((FIXED + 1)) 53 +done 54 + 55 +# Clean dangling global last symlink 56 +if [ -L "last" ] && [ ! -e "last" ]; then 57 + rm "last" 58 + echo "cleaned: last (broken symlink)" 59 + FIXED=$((FIXED + 1)) 60 +fi 61 + 62 +echo "Done. $DELETED session files pruned, $FIXED broken symlinks cleaned."