Files
proxmox/scripts/identify-duplicates.sh

103 lines
2.9 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Identify duplicate and similar scripts
# Usage: ./scripts/identify-duplicates.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
source "$SCRIPT_DIR/lib/logging.sh" 2>/dev/null || true
OUTPUT_FILE="${PROJECT_ROOT}/docs/00-meta/DUPLICATE_SCRIPTS_ANALYSIS.md"
log_header "Identifying Duplicate Scripts"
# Find scripts with same basename (exact duplicates)
log_info "Finding scripts with duplicate basenames..."
DUPLICATE_NAMES=$(find "$PROJECT_ROOT/scripts" -name "*.sh" -type f ! -path "*/node_modules/*" ! -path "*/.git/*" ! -path "*/archive/*" -exec basename {} \; | sort | uniq -d)
if [ -n "$DUPLICATE_NAMES" ]; then
log_warn "Found scripts with duplicate names:"
echo "$DUPLICATE_NAMES" | while read -r name; do
echo " - $name"
find "$PROJECT_ROOT/scripts" -name "$name" ! -path "*/archive/*" | sed 's/^/ /'
done
else
log_success "No duplicate basenames found"
fi
# Find similar scripts by pattern
log_info "Finding similar scripts by pattern..."
cat > "$OUTPUT_FILE" <<EOF
# Duplicate Scripts Analysis
**Date:** $(date +%Y-%m-%d)
**Purpose:** Identify duplicate and similar scripts for consolidation
---
## 1. Exact Duplicate Names
EOF
if [ -n "$DUPLICATE_NAMES" ]; then
echo "$DUPLICATE_NAMES" | while read -r name; do
echo "### $name" >> "$OUTPUT_FILE"
find "$PROJECT_ROOT/scripts" -name "$name" ! -path "*/archive/*" | while read -r file; do
size=$(wc -l < "$file" 2>/dev/null || echo 0)
echo "- \`$file\` ($size lines)" >> "$OUTPUT_FILE"
done
echo "" >> "$OUTPUT_FILE"
done
else
echo "None found." >> "$OUTPUT_FILE"
fi
cat >> "$OUTPUT_FILE" <<EOF
---
## 2. Similar Functionality Groups
### Deployment Scripts
EOF
# Group deployment scripts
find "$PROJECT_ROOT/scripts" -name "deploy-*.sh" -type f ! -path "*/archive/*" | while read -r script; do
lines=$(wc -l < "$script" 2>/dev/null || echo 0)
echo "- \`$script\` ($lines lines)" >> "$OUTPUT_FILE"
done
cat >> "$OUTPUT_FILE" <<EOF
### Setup Scripts
EOF
find "$PROJECT_ROOT/scripts" -name "setup-*.sh" -type f ! -path "*/archive/*" | while read -r script; do
lines=$(wc -l < "$script" 2>/dev/null || echo 0)
echo "- \`$script\` ($lines lines)" >> "$OUTPUT_FILE"
done
cat >> "$OUTPUT_FILE" <<EOF
### Configuration Scripts
EOF
find "$PROJECT_ROOT/scripts" -name "configure-*.sh" -o -name "config-*.sh" -type f ! -path "*/archive/*" | while read -r script; do
lines=$(wc -l < "$script" 2>/dev/null || echo 0)
echo "- \`$script\` ($lines lines)" >> "$OUTPUT_FILE"
done
cat >> "$OUTPUT_FILE" <<EOF
### Fix Scripts
EOF
find "$PROJECT_ROOT/scripts" -name "fix-*.sh" -type f ! -path "*/archive/*" | head -20 | while read -r script; do
lines=$(wc -l < "$script" 2>/dev/null || echo 0)
echo "- \`$script\` ($lines lines)" >> "$OUTPUT_FILE"
done
log_success "Analysis complete: $OUTPUT_FILE"