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"