
J'ai écrit cette action pour faire le ménage dans les images et pdf qui se sont entassés depuis 8 ans sur le site de UP.
Mon dossier images est passé de 132 Mo à 95 Mo, pas mal 😀
Si vous êtes angoissé à l'idée de lancer un nettoyage automatique, l'analyse permet de faire le point sur l'utilisation des fichiers utilisés, leurs tailles et poids
{up upfilescleaner=folder_source}- upfilescleaner: chemin du dossier à analyser
- extensions = jpg,jpeg,png,gif,pdf: extensions
- bd-tables: tables et champs. Défaut: content:introtext,fulltext,images ; categories:description,params ; modules:params ; menus:params
- folder-backup = tmp/up-files-cleaner: le chemin vers le dossier de stockage des fichiers inutiles
- folder-purge: suppressions des dossiers vides du dossier upfilescleaner OU contenant uniquement les fichiers indiqués (ex: index.html,info.txt)
Exclure ou inclure certains fichiers
- suffix-lang = -fr,-en: pour prendre en compte les versions avec un suffixe calculé. Ex: -en,-fr. séparateur : virgule
- suffix-version = -mini: pour conserver également la version sans le suffixe. Ex: -mini. séparateur : virgule
- folders-exclude: liste des dossiers non concernés. séparateur : virgule
- files-exclude: liste des fichiers conservés. séparateur : virgule
Style du bloc principal
- id:
- class: classe(s) pour bloc
- style: style inline pour bloc
- btn-style = btn btn-primary: style du bouton action
- css-head (base-css): style ajouté dans le HEAD de la page
Le résultat
Comme il n'est pas possible de faire une démonstration de cette action, la copie d'écran ci-dessous vous en donne un aperçu.

L'action affiche l'arborescence d'un dossier avec :
- le chemin des sous-dossiers sur fond jaune et un éventuel commentaire
- Dossier exclu par utilisateur :
- Sous-dossier d'un dossier exclu par utilisateur ou utilisé
- Dossier utilisé dans un shortcode
- la liste des fichiers avec :
- les dimensions et le poids. Un survol de ces infos affiche une miniature de l'image.
Un poids supérieur à 200 Ko est surligné pour vous mettre en garde - un éventuel commentaire
- Fichier exclu par utilisateur
- Fichier utilisé par dossier et directement
- les dimensions et le poids. Un survol de ces infos affiche une miniature de l'image.
La couleur du texte indique le statut du dossier ou du fichier
- rouge : non utilisé. Ces fichiers seront déplacés vers un autre dossier
- vert : utilisé ou indiqué comme préservé dans les options
- orange : fichier utilisé à la fois par un dossier et directement
Au-dessous de la liste, un bouton permet de lancer le nettoyage.
- déplacement de tous les fichiers en rouge vers un autre dossier
- suppression de tous les dossiers vides
Le principe
L'action parcours tous les fichiers d'un dossier pour vérifier si leur chemin est utilisé dans la base de données.
Comme il n'est pas possible de faire une démonstration, je vais donc vous expliquer son fonctionnement.
{up upfilescleaner=images | extensions = jpg,jpeg,png,gif,pdf | folders-exclude=images/logos, srcset
| bd-tables: content:introtext,fulltext,images ; categories:description,params ; modules:params ; menus:params
| folder-backup = tmp/up-files-cleaner
| folder-purge=index.html}
- On extrait le contenu des champs de la base de données (bd-tables) qui pouvent contenir des images .
- Pour tous les fichiers, avec l'extension, du dossier indiqué (upfilescleaner) en excluant le contenu du dossier images/logos et celui de tous les dossiers srcset.
- On recherche la présence de leur chemin ou celui de leur dossier dans le texte récupéré de la base de données. (*)
- Une liste affiche en vert les fichiers utilisés et en rouge ceux qui peuvent être supprimés.
- Un bouton vous propose de déplacer tous les fichiers en rouge vers le dossier de votre choix en conservant l'arborescence d'origine.
- folder-purge permet de supprimer tous les dossiers vides ou avec uniquement un fichier index.html
- En cas d'erreur, il sera possible de rapatrier manuellement le fichier ou dossier manquant.
- Pour rechercher les liens cassés, aidez-vous de l'excellent Xenu's Link Sleuth
(*) on trouvera images/photos/image.jpg dans <img src="/images/photos/image.jpg"> ou {up image-magnify=images/photos/image.jpg}.
La totalité des fichiers d'un dossier sera exclue si l'on trouve uniquement son chemin dans {up image-gallery=images/photos}
Mais également dans un texte d'explication comme "les images doivent être dans le dossier images/photos". Pour éviter ces cas, modifiez le texte pour qu'il ne soit pas reconnu comme chemin.
Attention, il n'est pas possible de savoir si un fichier est utilisé par une CustomField.
Je vous conseille de créer un dossier spécifique pour ces fichiers puis d'exclure dans l'option folders-exclude
Les options
Définir les dossiers et fichiers sur lesquels portent l'analyse
- upfilescleaner
- le chemin vers le dossier à analyser (depuis la racine du site).
En général, il s'agit du dossier
images, mais il est possible d'indiquer tout emplacement contenant des fichiers à vérifier.Il est aussi possible de fractionner l'analyse par gros sous-dossier.
Cela est permis, du fait que l'on recherche l'utilisation d'un fichier dans la BD, et non l'inverse. - extensions
- la liste des extensions des fichiers pour lesquels nous voulons rechercher ceux qui sont inutilisés. par défaut :
jpg,jpeg,png,gif,pdf - suffix-lang
-fr,-enpar défaut, cette option permet d'indiquer les suffixes que vous utilisez pour les différentes versions d'un fichier.Un exemple :
{html=img | src=images/flag{up lang}.png}permet d'afficher un petit drapeau correspondant à la langue du visiteur.Dans ce cas, l'action recherche si les fichiers
images/flag-fr.pnget/ouimages/flag-en.pngexistent. Si oui, ces fichiers sont considérés comme utilisés.- suffix-version
- -mini par défaut, cette option est utile si vous avez plusieurs versions d'une image.
Un exemple : j'utilise le suffixe -mini pour les vignettes des images et une image de même nom sans le suffixe pour l'affichage en grande taille.
Dans ce cas, si le fichier
image-mini.jpgexiste, on recherche et on valide l'utilisation du fichierimage.jpg - folders-exclude
- files-exclude
- il est possible que l'action considère qu'un fichier est inutilisé alors que c'est faux dans les cas suivants :
- les sous-dossiers contenant les versions dans différentes tailles des images. ex: srcset
- un dossier ou image dont le chemin est construit par un script
- une image utilisée par un fichier HTML chargé en Ajax
- des icônes, logos, drapeaux conservés pour une utilisation ultérieure
- un sous-dossier géré par une autre extension. Ex: une galerie d'image où la suppression doit être faite dans la BD
Il suffit d'ajouter le chemin depuis la racine du site vers le sous-dossier ou fichier.
Vous pouvez exclure tous les sous-dossiers d'un même nom en indiquant uniquement le nom de ce dossier.Le fichier custom/list-exclude.txt dans le dossier de l'action permet également de définir les exclusions.
L'avantage de ce fichier est de pouvoir mettre des commentaires sur la raison d'une exclusion, en débutant une ligne par un point-virgule.Voir le fichier custom/list-exclude.txt de ce site
Définir les tables et champs de la base de données où rechercher
- bd-tables
- la valeur par défaut, est :
content:introtext,fulltext,images ; categories:description,params ; modules:params ; menu:paramsce qui correspond aux champs introtext, fulltext et images de la table content, puis les champs description, params de categorie et ainsi de suite ...
Vous pouvez compléter cette liste en commençant par le signe +, sinon votre liste remplacera la liste par défaut
Définir l'emplacement des fichiers inutiles
- folder-backup
- Le chemin vers lequel seront déplacées les images inutilisées. Par défaut : tmp/up-upfilescleaner
Ce dossier étant ignoré lors d'une sauvegarde, je vous conseille, une fois le ménage achevé, de le déplacer dans un dossier externe au site
Ce dossier contiendra :
- un dossier où sont déplacés les fichiers inutiles. Si vous exécutez plusieurs fois cette action avec des chemins différents, plusieurs dossiers seront créés.
- upfilescleaner-files.txt : la liste des derniers fichiers déplacés
- data-source.txt : le résultat de la dernière extraction de la base de données. Cela est utile pour comprendre pourquoi un fichier n'est pas trouvé dans la base de données
- upfilescleaner-folder-purge.txt : interne, la liste des dossiers et des fichiers supprimables
- folder-purge
- Permet de supprimer les dossiers vides du dossier analysé. Cette option doit contenir, la liste des fichiers sans intérêt (ex: index.html, info.txt).
grid (1) span (1) upactionslist (1) div (1) csv2def (3) ajax-view (1) jcontent-info (1)
