#!/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."