102 lines
2.9 KiB
Bash
Executable File
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."
|