#!/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" <> "$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" </dev/null || echo 0) echo "- \`$script\` ($lines lines)" >> "$OUTPUT_FILE" done cat >> "$OUTPUT_FILE" </dev/null || echo 0) echo "- \`$script\` ($lines lines)" >> "$OUTPUT_FILE" done cat >> "$OUTPUT_FILE" </dev/null || echo 0) echo "- \`$script\` ($lines lines)" >> "$OUTPUT_FILE" done cat >> "$OUTPUT_FILE" </dev/null || echo 0) echo "- \`$script\` ($lines lines)" >> "$OUTPUT_FILE" done log_success "Analysis complete: $OUTPUT_FILE"