#!/bin/bash # Définition de l'URL du script SCRIPT_URL="https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/scripts/fetch_scripts.sh" SCRIPT_NAME=$(basename "$0") TMP_SCRIPT="/tmp/$SCRIPT_NAME" # Télécharger la dernière version du script wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL" # Vérifier si la mise à jour est différente de la version actuelle if ! cmp -s "$TMP_SCRIPT" "$0"; then echo "🔄 Mise à jour du script..." mv "$TMP_SCRIPT" "$0" chmod +x "$0" echo "✅ Script mis à jour ! Redémarrage..." exec "$0" "$@" exit 0 else rm "$TMP_SCRIPT" fi # Définition du dépôt et des fichiers de configuration REPO_URL="https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/scripts" DIR_LIST_FILE=".directories.txt" SELECTED_DIRS_FILE=".selected_dirs.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 # Charger les dossiers précédemment sélectionnés if [ -f "$SELECTED_DIRS_FILE" ]; then mapfile -t PREVIOUS_SELECTION < "$SELECTED_DIRS_FILE" else PREVIOUS_SELECTION=() 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 if [[ " ${PREVIOUS_SELECTION[*]} " =~ " $dir " ]]; then CHOICES+=("$dir" "" ON) else CHOICES+=("$dir" "" OFF) fi 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 # Convertir la sélection en tableau SELECTED_DIRS_ARRAY=("$MANDATORY_DIR" $(echo "$SELECTED_DIRS" | tr -d '"')) # Enregistrer la sélection actuelle echo "${SELECTED_DIRS_ARRAY[@]}" > "$SELECTED_DIRS_FILE" # Identifier les dossiers à supprimer (ceux qui ne sont plus sélectionnés) for dir in "${PREVIOUS_SELECTION[@]}"; do if [[ ! " ${SELECTED_DIRS_ARRAY[*]} " =~ " $dir " ]]; then echo "🗑 Suppression du dossier $dir..." rm -rf "$dir" fi done # 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 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."