web-dev-qa-db-fra.com

Comment supprimer les fichiers inutilisés des répertoires

Je souhaite supprimer/supprimer des fichiers des répertoires du site (par exemple, /sites/default/files/*) qui ne sont pas utilisés sur le site. Il y a des milliers de fichiers qui provoquent une taille de remplissage. Des suggestions à ce sujet?

6
user13218

J'ai trouvé ce post https://drupal.org/node/733258 ... peut aider ...

Le principal objectif abordé dans ce numéro est de supprimer les images qui n'ont aucune utilité directement de la base de données via des requêtes SQL.

Module de fichiers d'audit est suggéré comme un bon début (car ne supprime pas les fichiers) pour trouver les fichiers inutilisés.

Cet extrait de code est l'une des solutions suggérées du problème:

<?php
//db_query to find all files not attached to a node:
$result = db_query("SELECT fid FROM file_managed WHERE NOT EXISTS (SELECT * FROM file_usage WHERE file_managed.fid = file_usage.fid) ");

//Delete file & database entry
for ($i = 1; $i <= $result->rowCount(); $i++) {
  $record = $result->fetchObject();
  $file = file_load($record->fid);
  if ($file != NULL) {
    file_delete($file);
  } }
?>
8
jramby

Il existe un projet sandbox appelé File Delete , qui fournit la commande drush drush file-delete-unused --all pour supprimer tous les fichiers signalés dans file_managed qui ne se trouvent pas dans file_usage. Il supprime le fichier lui-même et l'entrée de base de données.

1
LarS

Un moyen simple de rechercher les fichiers inutilisés consiste à exécuter la requête 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

Cette requête retournerait tous les fichiers qui ne sont associés à aucun nœud.

De plus, afin d'éviter d'atterrir dans de telles situations, il est préférable d'ajouter un fichier_usage_add () à chaque fichier. Cela permettra au système de savoir que le fichier est utilisé. L'ajout d'un fichier_usage_delete () fait un travail de type cron de suppression des fichiers inutilisés du système.

1
Rakhi

Vous pouvez soit le supprimer manuellement, soit passer par https://drupal.org/node/733258 ce qui vous aiderait à supprimer les images indésirables.

0
Nitesh Sethia

Voici mon exemple de suppression des fichiers gmap_markers inutilisés à l'aide de drush:

drush sqlq "SELECT fid FROM file_managed WHERE status = 1 AND filename LIKE 'gmap_markers%'" | xargs -L1 -I% drush -v eval "file_delete(file_load(%));"

Vous pouvez voir tous les fichiers Drupal par:

drush sqlq "SELECT fid, filename, uri FROM file_managed WHERE status = 1"

Pour voir si aucun fichier spécifique n'est utilisé, je vous suggère de rechercher chacun de ces fichiers dans le système de fichiers et la base de données à l'aide des commandes d'exemple suivantes:

grep -R "my_file.jpg" /Drupal/webroot
drush --ordered-dump sql-dump | grep "my_file.jpg"

Une fois que le fichier n'existe nulle part ailleurs que dans file_managed standard, etc., je pense qu'il peut être supprimé en toute sécurité.

0
kenorb