Last active
August 15, 2026 22:13
-
-
Save ILPlais/eeaf3e4641dc6163a4a3559cf78645e9 to your computer and use it in GitHub Desktop.
Script d'archivage des fichiers `Journal-AAAA-MM-JJ-Édition.pdf`
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # Script d'archivage des fichiers Journal-AAAA-MM-JJ-Édition.pdf | |
| # Archive les fichiers des mois précédents dans JOURNAL-AAAA.7z | |
| # Configuration : | |
| # Nom du journal (peut contenir des espaces) | |
| NOM_JOURNAL="Le Télégramme" | |
| # Obtenir l'année et le mois actuels | |
| ANNEE_ACTUELLE=$(date +%Y) | |
| MOIS_ACTUEL=$(date +%m) | |
| # Vérifier que 7z est installé | |
| if ! command -v 7z &> /dev/null; then | |
| echo "\033[91m[!] Erreur : 7z n\'est pas installé !\033[0m" | |
| exit 1 | |
| fi | |
| # Compteurs pour le rapport | |
| total_fichiers=0 | |
| total_archives=0 | |
| printf '%*s\n' $(tput cols) | tr ' ' '=' | |
| echo "[*] Archivage des journaux :" | |
| echo -e "[+] 📰 Journal : $NOM_JOURNAL" | |
| echo -e "[+] 📆 Date actuelle : $ANNEE_ACTUELLE-$MOIS_ACTUEL" | |
| printf '%*s\n' $(tput cols) | tr ' ' '=' | |
| # Créer un tableau associatif pour regrouper les fichiers par année | |
| declare -A fichiers_par_annee | |
| # Parcourir tous les fichiers PDF et les regrouper par année | |
| # Utiliser un pattern qui gère les espaces dans le nom | |
| while IFS= read -r -d '' fichier; do | |
| # Extraire l'année et le mois du nom de fichier | |
| # Enlever l'extension .pdf et séparer par '-' | |
| base=$(basename "$fichier" .pdf) | |
| # Vérifier que le fichier correspond au pattern attendu | |
| if [[ ! "$base" =~ ^${NOM_JOURNAL}-[0-9]{4}-[0-9]{2}-[0-9]{2}- ]]; then | |
| continue | |
| fi | |
| # Extraire année et mois après le nom du journal | |
| annee=$(echo "$base" | sed "s/^${NOM_JOURNAL}-//" | cut -d'-' -f1) | |
| mois=$(echo "$base" | sed "s/^${NOM_JOURNAL}-//" | cut -d'-' -f2) | |
| # Vérifier si le fichier est d'un mois précédent | |
| if [[ "10#$annee" -lt "10#$ANNEE_ACTUELLE" ]] || | |
| [[ "10#$annee" -eq "10#$ANNEE_ACTUELLE" && "10#$mois" -lt "10#$MOIS_ACTUEL" ]]; then | |
| # Ajouter le fichier à la liste pour cette année | |
| if [[ -z "${fichiers_par_annee[$annee]}" ]]; then | |
| fichiers_par_annee[$annee]="$fichier" | |
| else | |
| fichiers_par_annee[$annee]="${fichiers_par_annee[$annee]}"$'\n'"$fichier" | |
| fi | |
| fi | |
| done < <(find . -maxdepth 1 -name "${NOM_JOURNAL}-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-*.pdf" -print0) | |
| # Archiver tous les fichiers de chaque année en une seule commande | |
| for annee in "${!fichiers_par_annee[@]}"; do | |
| archive_name="${NOM_JOURNAL}-${annee}.7z" | |
| # Créer un tableau pour les fichiers de cette année | |
| mapfile -t fichiers_annee <<< "${fichiers_par_annee[$annee]}" | |
| nb_fichiers=${#fichiers_annee[@]} | |
| echo -e "\t[+] 🗜️ Archivage de $nb_fichiers fichiers de $annee -> $archive_name" | |
| # Archiver tous les fichiers de l'année en une seule fois | |
| # Utiliser un tableau pour gérer correctement les espaces | |
| # Afficher la progression de 7z | |
| if 7z a -stl -mx=9 -bso1 -bse1 -bsp1 -bb3 "$archive_name" "${fichiers_annee[@]}"; then | |
| # Supprimer les fichiers originaux après archivage réussi | |
| for f in "${fichiers_annee[@]}"; do | |
| rm "$f" | |
| echo -e "\t[+] 🗑️ Fichier supprimé : $f" | |
| done | |
| ((total_fichiers += nb_fichiers)) | |
| ((total_archives++)) | |
| else | |
| echo "\033[91m[!] ⚠️ Erreur lors de l\'archivage des fichiers de $annee\033[0m" | |
| fi | |
| printf '%*s\n' $(tput cols) | tr ' ' '-' | |
| done | |
| # Compter le nombre d'archives créées/modifiées | |
| echo "[*] Résumé :" | |
| echo -e "[+] 📄 Fichiers archivés : $total_fichiers" | |
| echo -e "[+] 🗜️ Archives créées/modifiées : $total_archives" | |
| echo "[*] ✅ Terminé !" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment