Descarrega tots els artifacts de Nexus


Un script que descarrega tots els artefactes d’un Nexus, per quan has de migrar una versió a una de nova, o per fer backup

#!/bin/bash
# ============================================================
# Descarrega tots els artefactes d'un Nexus 3
# fen servir la API REST oficial (no el browse HTML)
# ============================================================

NEXUS_URL="https://xxxx.xxxx.xxx"
REPO="cache"
DESTINACIO="/data/nexus"
USUARI="admin"
TOKEN="xxxxx"

mkdir -p "$DESTINACIO"
cd "$DESTINACIO" || exit 1

echo "📡 Obternir el llistat d'artefactes de $REPO en $NEXUS_URL..."

# Arxiu temporal per guardar la paginació
NEXT_URL="$NEXUS_URL/service/rest/v1/assets?repository=$REPO"
COUNT=0

while [ -n "$NEXT_URL" ]; do
  echo "➡️  Consultant pàgina: $NEXT_URL"
  RESPONSE=$(curl -s -u "$USUARI:$TOKEN" "$NEXT_URL")
  
  # Extreu-re URLs de descàrrega i següent pàgina
  echo "$RESPONSE" | jq -r '.items[].downloadUrl' >> urls.txt
  NEXT_URL=$(echo "$RESPONSE" | jq -r '.properToken')
  
  if [ "$NEXT_URL" != "null" ] && [ -n "$NEXT_URL" ]; then
    NEXT_URL="$NEXUS_URL/service/rest/v1/assets?repository=$REPO&properToken=$NEXT_URL"
  else
    NEXT_URL=""
  fi
done

TOTAL=$(wc -l < urls.txt)
echo "✅ S'han trovat $TOTAL artefactes. Comencem."

# Descarrega cada artefacte preservant estructura de carpetes
while IFS= read -r URL; do
  REL_PATH=$(echo "$URL" | sed "s|.*/$REPO/||")
  DIR=$(dirname "$REL_PATH")
  mkdir -p "$DIR"
  COUNT=$((COUNT + 1))
  echo "⬇️  [$COUNT] $REL_PATH"
  curl -s -u "$USUARI:$TOKEN" -o "$REL_PATH" "$URL"
done < urls.txt

echo "🎯 Descàrrega finalitzada. Artefactes guardats en $DESTINACIO"