|
| 1 | +#!/bin/bash |
| 2 | +# Check that every image referenced in _posts/ exists in Cloudflare R2. |
| 3 | +# Also reports images in R2 that aren't referenced anywhere (orphans). |
| 4 | +# |
| 5 | +# Usage: ./tools/check-images.sh |
| 6 | + |
| 7 | +set -euo pipefail |
| 8 | + |
| 9 | +BUCKET="techno-tim-images" |
| 10 | +REMOTE="r2" |
| 11 | +POSTS_DIR="_posts" |
| 12 | +TMP_REF=$(mktemp) |
| 13 | +TMP_R2=$(mktemp) |
| 14 | + |
| 15 | +echo "==> Scanning posts for image references..." |
| 16 | +grep -roh '/assets/img/[^"'"'"' )]*' "$POSTS_DIR/" \ |
| 17 | + | sed 's|.*:/assets/|/assets/|' \ |
| 18 | + | sort -u > "$TMP_REF" |
| 19 | + |
| 20 | +echo "==> Fetching R2 file list..." |
| 21 | +rclone ls "$REMOTE:$BUCKET/assets/img/" \ |
| 22 | + | awk '{print "/assets/img/"$2}' \ |
| 23 | + | grep -v '^/assets/img/favicons/' \ |
| 24 | + | sort -u > "$TMP_R2" |
| 25 | + |
| 26 | +REFERENCED=$(wc -l < "$TMP_REF" | tr -d ' ') |
| 27 | +IN_R2=$(wc -l < "$TMP_R2" | tr -d ' ') |
| 28 | + |
| 29 | +echo "" |
| 30 | +echo " Referenced in posts : $REFERENCED" |
| 31 | +echo " Files in R2 : $IN_R2" |
| 32 | +echo "" |
| 33 | + |
| 34 | +# Images referenced in posts but missing from R2 |
| 35 | +MISSING=$(comm -23 "$TMP_REF" "$TMP_R2") |
| 36 | +MISSING_COUNT=$(echo "$MISSING" | grep -c . || true) |
| 37 | + |
| 38 | +if [ -z "$MISSING" ]; then |
| 39 | + echo "✅ All referenced images exist in R2." |
| 40 | +else |
| 41 | + echo "❌ $MISSING_COUNT image(s) referenced in posts but MISSING from R2:" |
| 42 | + echo "$MISSING" | sed 's/^/ /' |
| 43 | + echo "" |
| 44 | + echo "To upload missing images (if you have them locally):" |
| 45 | + echo " ./tools/upload-images.sh assets/img/" |
| 46 | +fi |
| 47 | + |
| 48 | +echo "" |
| 49 | + |
| 50 | +# Images in R2 not referenced in any post (orphans) |
| 51 | +ORPHANS=$(comm -13 "$TMP_REF" "$TMP_R2") |
| 52 | +ORPHAN_COUNT=$(echo "$ORPHANS" | grep -c . || true) |
| 53 | + |
| 54 | +if [ -z "$ORPHANS" ]; then |
| 55 | + echo "✅ No orphaned images in R2." |
| 56 | +else |
| 57 | + echo "ℹ️ $ORPHAN_COUNT image(s) in R2 not referenced in any post (may be safe to delete):" |
| 58 | + echo "$ORPHANS" | sed 's/^/ /' |
| 59 | +fi |
| 60 | + |
| 61 | +rm -f "$TMP_REF" "$TMP_R2" |
0 commit comments