fichiers.breizh.pm/controller_seq.sh

75 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# Configuration
controller=/home/files/scripts/controller_seq.sh
generator=/home/files/scripts/generator.sh
export root=/home/files/data
export cache=/dev/shm/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"