Une aide pour déplacer les images et autres documents inutilisés vers un autre dossier.

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

🆙 upfilescleaner : Déplace les fichiers inutilisés d'un dossier vers un dossier pour récupération éventuelle

Cliquer pour lire la documentation

syntaxe {up upfilescleaner=folder_source}
@version: UP-5.2 @author : Lomart @license: GNU/GPLv3 @credit: Lomart @tags: Expert
  • 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

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}
  1. On extrait le contenu des champs de la base de données (bd-tables) qui pouvent contenir des images .
  2. 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.
  3. 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. (*)
  4. Une liste affiche en vert les fichiers utilisés et en rouge ceux qui peuvent être supprimés.
  5. Un bouton vous propose de déplacer tous les fichiers en rouge vers le dossier de votre choix en conservant l'arborescence d'origine.
  6. folder-purge permet de supprimer tous les dossiers vides ou avec uniquement un fichier index.html
  7. En cas d'erreur, il sera possible de rapatrier manuellement le fichier ou dossier manquant.
  8. 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,-en par 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.png et/ou images/flag-en.png existent. 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.jpg existe, on recherche et on valide l'utilisation du fichier image.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:params

ce 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). 

Pour info, cette page utilise 9 action(s) :
grid (1) span (1) upactionslist (1) div (1) csv2def (3) ajax-view (1) jcontent-info (1)
Dernières modifications

Sommaire: Toutes les actions