Skip to content

Instantly share code, notes, and snippets.

@ILPlais
Last active August 15, 2026 22:13
Show Gist options
  • Select an option

  • Save ILPlais/eeaf3e4641dc6163a4a3559cf78645e9 to your computer and use it in GitHub Desktop.

Select an option

Save ILPlais/eeaf3e4641dc6163a4a3559cf78645e9 to your computer and use it in GitHub Desktop.
Script d'archivage des fichiers `Journal-AAAA-MM-JJ-Édition.pdf`
#!/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