fichiers.breizh.pm/controller.sh

69 lines
1.6 KiB
Bash
Executable file

#!/bin/bash
# Configuration
generator=/home/files/generator.sh
max=4
export cache=/home/files/data/.thumbnails
export root=/home/files/data
# 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}"/*
fi
# Mise en place de l'environnement
cd "$root"
shopt -s globstar
declare -a todo
# Pour tous les répertoires et sous-répertoires
for i in **/
do
# 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
# Retour au dossier de départ
cd - &>/dev/null
done
# S'il y a au moins un dossier, on lance le générateur sur chaque, avec $max process en parallèle
[[ "${#todo[@]}" -gt 0 ]] && for i in "${todo[@]}"; do echo "$i"; done | sort -r | xargs -d'\n' -L 1 -P$max $generator
# Et on génère l'index.html dossier racine
$generator
shopt -u globstar