Existe-t-il un moyen de répertorier tous les fichiers inutilisés qui résident dans le système de fichiers public et dans un répertoire de thèmes et de les répertorier, ou peut-être même de les supprimer automatiquement?
Je veux dire des fichiers qui ne sont actuellement liés à aucune feuille de style CSS ou à partir d'un nœud.
Vous pouvez rechercher des fichiers orphelins en exécutant la requête MySQL suivante:
SELECT fm.*
FROM file_managed AS fm
LEFT OUTER JOIN file_usage AS fu ON (fm.fid = fu.fid)
LEFT OUTER JOIN node AS n ON (fu.id = n.nid)
WHERE fu.type = 'node' AND n.nid IS NULL
Cela renvoie tous les fichiers qui n'ont aucun nœud associé. Je ne sais pas s'il est sûr de supprimer les lignes et les fichiers retournés, cela dépend probablement aussi de la configuration de votre module. Utilisez uniquement à vos risques et périls!
Pour ceux qui viendront à ce poste trois ans plus tard, il y a un petit module que vous pouvez utiliser pour le faire appelé Fancy File Delete .
Au moment de ce post, il est en version bêta, alors utilisez-le à vos risques et périls. Comme toujours, le nettoyage de tout objet orphelin via des requêtes DB peut être sommaire et son succès dépend fortement de la configuration particulière de votre module.
Quelque chose qui peut aider à identifier " les fichiers qui ne sont plus attachés à des nœuds ou des fichiers et un répertoire qui ne sont pas dans la table gérée de fichiers" (comme dans la question en double sur " Comment faire des fichiers inutilisés? "), c'est utiliser le module File Checker . Quelques détails à ce sujet, à partir de sa page de projet:
Dans un monde parfait Drupal votre système de fichiers serveur et ses entrées de correspondance dans la table des fichiers de Drupal sont 100% synchronisés. Mais que se passe-t-il si des parties de votre système de fichiers ont été corrompues en raison d'une défaillance du disque? Ou l'un des vos modules ont gâché votre base de données et vos fichiers? Ou votre script de déploiement est devenu obsédé? Eh bien, ce module vous aidera à surveiller et à découvrir quels fichiers ne sont pas synchronisés.
Hors de la boîte, la table des fichiers a deux types de statuts: Temporaire (0) et Permanent (1). Le vérificateur de fichiers introduit un statut supplémentaire manquant (2). Dans le cadre du processus de vérification qui peut être déclenché de différentes manières, la colonne d'état du tableau des fichiers est mise à jour.
Caractéristiques
- Exécuter le processus de vérification: à la demande, via cron, via drush (en planification)
- Page de présentation de la liste des fichiers avec filtres
- Intégration des vues
- Commande Drush pour la vérification des fichiers
Si vous souhaitez exporter les résultats d'une vue, il est recommandé d'utiliser le module views_data_export.
Donc, ce que vous pourriez faire, c'est comme ça:
Remarque : même si cette question concerne D7, il en existe une version (alfa) également pour D8.
il y a un module qui supprime les fichiers indésirables suppression de fichiers fantaisie .
Vue de tous les fichiers gérés avec une option pour forcer leur suppression via des actions personnalisées VBO Suppression manuelle des fichiers gérés par FID (et une option pour forcer la suppression si vous le souhaitez vraiment). Suppression des fichiers inutilisés du répertoire des fichiers par défaut qui ne se trouvent pas dans la table gérée des fichiers. AKA supprimant tous les fichiers non gérés. Suppression des fichiers inutilisés de l'installation complète qui ne sont plus attachés aux nœuds et à la table d'utilisation des fichiers. AKA supprimant tous les fichiers orphelins.
Vous pouvez supprimer le fichier inutilisé en
Supprimer manuellement de la table file_managed, par une requête comme
$this->database ->delete('file_managed') ->condition('fid', $fid, '=') ->execute();
Définir l'état d'un fichier , pour marquer est comme fichier temporaire, donc le cron le supprimera après un certain temps.$file = File::load ($fid); $file->setTemporary();
Le module suppression de fichiers fantaisie ne fonctionnait pas du tout pour moi. Voici une alternative plus manuelle.
Pour supprimer des fichiers d'un dossier qui ne figurent pas dans la table des fichiers gérés, vous pouvez:
1) Créez une liste de tous les fichiers gérés:
mysql whateverdb -e "select filename from file_managed" > ~/managed-files.txt
2) Supprimez tous les fichiers d'un répertoire qui ne figurent pas dans cette liste. Pour ce faire, j'ai utilisé un petit script bash:
#!/bin/bash
IMG_FOLDER='/var/www/html/yoursite/docroot/sites/default/files/certain-images'
EXCLUDES='/home/yourhomeuser/managed-files.txt'
for FILE in $IMG_FOLDER/*; do
if ! grep "$FILE" "$EXCLUDES"; then
echo "Deleting $FILE"
rm -f "$FILE"
fi
done
Changez simplement le IMG_FOLDER
variable vers le chemin du dossier dans lequel vous souhaitez supprimer les fichiers (et mettez à jour le chemin vers votre fichier exclu)