Files
synology-thumbgen/nascleanup.sh
2025-12-29 21:54:38 -07:00

68 lines
3.0 KiB
Bash

#!/bin/bash
# Enhanced NAS cleanup script with thumbnail protection
# Usage: ./nascleanup.sh /volume1/Hydra/path/to/directory
if [ $# -eq 0 ]; then
echo "Usage: $0 <directory_path>"
echo "Example: $0 /volume1/Hydra/Creative/artsy"
exit 1
fi
TARGET_DIR="$1"
echo "=== Enhanced Synology Thumbnail Cleanup ==="
echo "Target directory: $TARGET_DIR"
# 1. Stop indexing services temporarily
echo "Stopping indexing services (best effort)..."
if command -v synoservicectl >/dev/null 2>&1; then
synoservicectl --stop synoindexd 2>/dev/null || true
synoservicectl --stop pkgctl-SynoFinder 2>/dev/null || true
elif command -v systemctl >/dev/null 2>&1; then
systemctl stop synoindexd 2>/dev/null || true
systemctl stop pkgctl-SynoFinder 2>/dev/null || true
else
echo " -> Service control unavailable; skipping"
fi
# 2. Clear indexing queue to prevent regeneration
echo "Clearing indexing queue (if accessible)..."
if [ -w /var/spool ]; then
rm -f /var/spool/syno_indexing_queue* 2>/dev/null || true
fi
# 3. Dry-run check (see what @eaDir directories exist)
echo "=== Existing @eaDir directories ==="
find "$TARGET_DIR" -type d -name '@eaDir' -exec echo '{}' \;
# 4. Remove any existing @eaDir directories
echo "=== Removing existing @eaDir directories ==="
# First make them writable so we can remove them
find "$TARGET_DIR" -type d -name '@eaDir' -exec chmod -R 755 '{}' \; 2>/dev/null || true
find "$TARGET_DIR" -path '*/@eaDir/*' -type f -exec chmod 644 '{}' \; 2>/dev/null || true
# Now remove them
find "$TARGET_DIR" -type d -name '@eaDir' -exec rm -rf '{}' \; || true
# 5. Rename eaDir_tmp to @eaDir (your custom thumbnails)
echo "=== Installing custom thumbnails ==="
# Ensure eaDir_tmp contents are writable before renaming
find "$TARGET_DIR" -type d -name 'eaDir_tmp' -exec chmod -R 755 '{}' \; 2>/dev/null || true
find "$TARGET_DIR" -path '*/eaDir_tmp/*' -type f -exec chmod 644 '{}' \; 2>/dev/null || true
# Use -depth so we process children before parents, and use $1 in bash -c for safety
find "$TARGET_DIR" -depth -type d -name 'eaDir_tmp' -exec bash -c 'd="$1"; target="${d%/*}/@eaDir"; echo " -> Replacing $d"; rm -rf "$target"; mkdir -p "$target"; cp -a "$d/." "$target/"; rm -rf "$d"' _ {} \; || true
# Remove any leftover eaDir_tmp directories (if rename failed)
echo "=== Removing leftover eaDir_tmp directories ==="
find "$TARGET_DIR" -type d -name 'eaDir_tmp' -exec rm -rf '{}' \; 2>/dev/null || true
# 6. Protect custom thumbnails with read-only permissions
echo "=== Adding indexing exclusion hints ==="
find "$TARGET_DIR" -type d -name '@eaDir' -exec sh -c 'touch "$1/.noindex" 2>/dev/null || true' _ {} \;
# 7. Protect custom thumbnails with read-only permissions (after .noindex)
echo "=== Protecting custom thumbnails ==="
find "$TARGET_DIR" -type d -name '@eaDir' -exec chmod 555 '{}' \; 2>/dev/null || true
find "$TARGET_DIR" -path '*/@eaDir/*' -type f -exec chmod 444 '{}' \; 2>/dev/null || true
echo "=== Cleanup complete! ==="
echo "Note: If indexing was stopped and needs restarting, use DSM UI or your NAS service tools."