75 lines
1.8 KiB
Bash
75 lines
1.8 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# Configuration
|
||
|
controller=/home/files/controller.sh.bak
|
||
|
generator=/home/files/generator.sh
|
||
|
export root=/home/files/data
|
||
|
export cache=/home/files/data/.thumbnails
|
||
|
|
||
|
# Force la génération en supprimant les index.html
|
||
|
# ainsi que la régénération des miniatures en les supprimant
|
||
|
if [[ "$1" == "-f" ]]
|
||
|
then
|
||
|
find "${root}" -name index.html -delete
|
||
|
rm "${cache}"/*
|
||
|
shift
|
||
|
fi
|
||
|
|
||
|
# Mise en place de l'environnement
|
||
|
# Si un dossier est donné en argument, on le traite, sinon on traite la racine
|
||
|
olddir="$PWD"
|
||
|
cd "${1:-$root}"
|
||
|
|
||
|
declare -a todo
|
||
|
|
||
|
# Pour les sous-répertoires
|
||
|
for i in */
|
||
|
do
|
||
|
# Si aucun sous répertoire, i vaut littéralement */ provoquant des erreurs, donc on ignore
|
||
|
[[ ! -d "$i" ]] && continue
|
||
|
|
||
|
# Récupération du chemin complet
|
||
|
full=$(realpath "$i")
|
||
|
|
||
|
# Exclusion(s)
|
||
|
if [[ "$full" =~ ^${root}/p ]]
|
||
|
then
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
# Analyse du répertoire
|
||
|
cd "$full"
|
||
|
|
||
|
# Si un index.html est déjà présent
|
||
|
if [[ -f "index.html" ]]
|
||
|
then
|
||
|
# Vérification de la date de modif des fichiers
|
||
|
for file in *
|
||
|
do
|
||
|
# Si plus récent, ou si le dossier a été modifié récemment (ex. suppresion d'un fichier)
|
||
|
if [[ "$file" -nt "index.html" ]] || [[ "$full" -nt "index.html" ]]
|
||
|
then
|
||
|
# Ajout du dossier à la liste. Dès qu'un fichier est concerné,
|
||
|
# on peut arrêter la boucle, inutile d'ajouter 10 fois le dossier
|
||
|
todo+=("$full")
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
# Si pas d'index.html, on ajoute direct le dossier
|
||
|
else
|
||
|
todo+=("$full")
|
||
|
fi
|
||
|
cd - &>/dev/null
|
||
|
done
|
||
|
|
||
|
# S'il y a au moins un sous-dossier, on relance le script dans chaque
|
||
|
# sous-dossier pour les traiter d'abord
|
||
|
[[ "${#todo[@]}" -gt 0 ]] && for i in "${todo[@]}"; do $controller "$i"; done
|
||
|
|
||
|
# Une fois tous les sous-dossiers traités, on génère l'index.html du dossier courant
|
||
|
$generator
|
||
|
|
||
|
# Et on retourne au dossier d'origine
|
||
|
cd "$olddir"
|
||
|
|