web-dev-qa-db-fra.com

Comment trouver des fichiers et des images orphelins qui ne sont pas liés à partir d'une feuille de style CSS ou d'un nœud?

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.

20
camcam

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!

Source: http://drupal.org/node/733258#comment-5582764

14
David Carter

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.

5
joe_flash

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:

  • Clonez (copiez) votre site dans un environnement de développement, mais ne copiez aucun des fichiers du répertoire que vous souhaitez vérifier. En variante (si cette question concerne un site de statut hors production), déplacez simplement tous les fichiers hors de ce répertoire.
  • Utilisez le module File Checker pour savoir quels fichiers sont "manquants": ce sont les fichiers qui ne sont évidemment pas inutilisés. Mais tout fichier sur lequel ce module ne discute pas est ... inutilisé!
  • En copiant tous les fichiers manquants à l'emplacement correct du répertoire que vous souhaitez vérifier, vous recréez ensuite étape par étape un contenu parfait de votre répertoire.

Remarque : même si cette question concerne D7, il en existe une version (alfa) également pour D8.

3
Pierre.Vriens

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.

2
vgoradiya

Vous pouvez supprimer le fichier inutilisé en

  1. Supprimer manuellement de la table file_managed, par une requête comme

    $this->database ->delete('file_managed') ->condition('fid', $fid, '=') ->execute();

  2. 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();

0

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)

0
Felix Eve