notes-techniques/scripts/fetch_scripts.sh

102 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Définition du dépôt et du fichier contenant la liste des dossiers
REPO_URL="https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/scripts"
DIR_LIST_FILE=".directories.txt"
MANDATORY_DIR="common"
# Télécharger la liste des dossiers disponibles
TMP_DIR=$(mktemp -d)
DIR_LIST_PATH="$TMP_DIR/$DIR_LIST_FILE"
wget -q -O "$DIR_LIST_PATH" "$REPO_URL/$DIR_LIST_FILE"
# Vérifier que la liste a bien été téléchargée
if [ ! -s "$DIR_LIST_PATH" ]; then
echo "❌ Erreur : Impossible de récupérer la liste des dossiers."
exit 1
fi
# Lire les dossiers disponibles dans un tableau
mapfile -t AVAILABLE_DIRS < "$DIR_LIST_PATH"
# Vérifier qu'il y a bien des dossiers disponibles
if [ ${#AVAILABLE_DIRS[@]} -eq 0 ]; then
echo "❌ Aucun dossier disponible dans la liste."
exit 1
fi
# Construire la liste pour whiptail
CHOICES=()
for dir in "${AVAILABLE_DIRS[@]}"; do
if [ "$dir" == "$MANDATORY_DIR" ]; then
continue # Ne pas inclure le dossier obligatoire dans le choix
fi
CHOICES+=("$dir" "" OFF)
done
# Affichage du menu de sélection avec whiptail
SELECTED_DIRS=$(whiptail --title "Sélection des dossiers" --checklist \
"Sélectionnez les dossiers à télécharger :" 20 60 10 \
"${CHOICES[@]}" 3>&1 1>&2 2>&3)
# Vérifier si l'utilisateur a annulé
if [ $? -ne 0 ]; then
echo "❌ Annulation par l'utilisateur."
exit 1
fi
# Ajouter le dossier obligatoire
SELECTED_DIRS_ARRAY=("$MANDATORY_DIR" $(echo "$SELECTED_DIRS" | tr -d '"'))
# Télécharger ou mettre à jour les fichiers pour chaque dossier sélectionné
for TARGET_DIR in "${SELECTED_DIRS_ARRAY[@]}"; do
LIST_FILE=".list_files.txt"
LIST_PATH="$TMP_DIR/$LIST_FILE"
echo "🔹 Récupération des scripts de '$TARGET_DIR'..."
# Télécharger la liste des fichiers
wget -q -O "$LIST_PATH" "$REPO_URL/$TARGET_DIR/$LIST_FILE"
if [ ! -s "$LIST_PATH" ]; then
echo "❌ Erreur : Impossible de récupérer la liste des fichiers pour $TARGET_DIR."
continue
fi
# Création du répertoire s'il n'existe pas
mkdir -p "$TARGET_DIR"
# Télécharger chaque fichier listé
while read -r file; do
FILE_NAME=$(basename "$file")
FILE_PATH="$TARGET_DIR/$FILE_NAME"
if [ -f "$FILE_PATH" ]; then
echo " ↻ Mise à jour de $FILE_NAME..."
else
echo " ↳ Téléchargement de $FILE_NAME..."
fi
echo "$file"
wget -q -O "$FILE_PATH" "$REPO_URL/$TARGET_DIR/$file"
done < "$LIST_PATH"
# Supprimer les fichiers obsolètes
for existing_file in "$TARGET_DIR"/*; do
if [ -f "$existing_file" ] && ! grep -qx "$(basename "$existing_file")" "$LIST_PATH"; then
echo " 🗑 Suppression de $(basename "$existing_file")..."
rm "$existing_file"
fi
done
# Rendre exécutables les scripts téléchargés
chmod +x "$TARGET_DIR"/*.sh
echo "✅ Scripts de '$TARGET_DIR' mis à jour avec succès."
done
# Nettoyage
rm -rf "$TMP_DIR"
echo "🚀 Tous les scripts sélectionnés ont été mis à jour et sont exécutables."