Как найти потерянные файлы и изображения, которые не связаны ни с одной таблицей стилей CSS, ни с любого узла?

Есть ли способ перечислить все неиспользуемые файлы, которые находятся внутри общедоступной файловой системы и внутри каталога темы, и перечислять их или, возможно, даже иметь возможность автоматически их удалять?

Я имею в виду файлы, которые в настоящее время не связаны ни с одной таблицей стилей CSS, ни с любым узлом.

21 голос | спросил camcam 25 Jpm1000000pmWed, 25 Jan 2012 15:08:10 +040012 2012, 15:08:10

6 ответов


13

Вы можете найти потерянные файлы, выполнив следующий запрос MySQL:

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

Возвращает все файлы, у которых нет связанного узла. Я не уверен, можно ли удалить возвращаемые строки и файлы, возможно, также зависит от настройки вашего модуля. Используйте только на свой страх и риск!

Источник: http://drupal.org/node/733258#comment-5582764

ответил David Carter 10 FebruaryEurope/MoscowbFri, 10 Feb 2012 19:25:31 +0400000000pmFri, 10 Feb 2012 19:25:31 +040012 2012, 19:25:31
5

Для тех, кто приходит на этот пост три года спустя, есть небольшой модуль, который вы можете использовать для этого: Fancy File Delete .

Во время этого сообщения он находится в бета-версии, поэтому используйте его на свой страх и риск. Как всегда, очистка сиротства через запросы БД может быть отрывочной, и ее успех сильно зависит от вашей конкретной настройки модуля.

ответил joe_flash 27 J000000Monday15 2015, 19:52:04
3

Что-то, что может помочь идентифицировать « файлы, которые больше не привязаны к узлам или файлам и каталогам, которые не находятся в файле управляемой таблицы » (как в дублированном вопросе о Как удалить ненужные файлы? "), следует использовать File Checker . Некоторые подробности об этом, со страницы проекта:

  

В идеальном мире Drupal ваша файловая система сервера и ее записи соответствия в таблице файлов Drupal синхронизированы на 100%. Но что, если части вашей файловой системы были повреждены из-за некоторого отказа диска? Или один из ваших модулей испортил вашу базу данных и файлы? Или ваш скрипт для развертывания вышел на экран? Ну, тогда этот модуль поможет вам контролировать и обнаруживать, какие файлы не синхронизированы.

     

В таблице файлов есть два типа статусов: временный (0) и постоянный (1). Средство проверки файлов вводит дополнительный статус Отсутствует (2). В рамках процесса проверки, который может запускаться различными способами, обновляется столбец статуса таблицы файлов.

     

Функции

     
  • Процесс проверки выполнения: по запросу, через cron, через drush (при планировании)
  •   
  • Страница обзора списка файлов с фильтрами
  •   
  • Интеграция просмотров
  •   
  • Команда Drush для проверки файлов
  •   

Если вы хотите экспортировать результаты просмотра, рекомендуется использовать модуль views_data_export.

Итак, что вы можете сделать, это так:

  • Клонирование (копирование) вашего сайта в среду какого-либо разработчика, но не копируйте ни один из файлов в каталоге, который вы хотите проверить. В качестве варианта (если этот вопрос касается сайта непроизводственного статуса), просто временно переместите все файлы из этого каталога.
  • Используйте File Checker модуль, чтобы узнать, какие файлы «отсутствуют»: это файлы, которые явно не , не используются. Но любой файл, о котором этот модуль не спорит, является ... неиспользуемым!
  • Скопировав все отсутствующие файлы в нужное месторасположение каталога, который вы хотите проверить, вы поэтапно воссоздаете идеальный контент своего каталога.

Примечание : хотя этот вопрос касается D7, это версия (alfa) для D8.

ответил Pierre.Vriens 26 Maypm16 2016, 14:42:38
2

существует один модуль, который удаляет ненужные файлы удачный файл .

  

Просмотр всех управляемых файлов с возможностью принудительного удаления их через VBO   пользовательские действия. Ручное удаление управляемых файлов с помощью FID (и опция   для принудительного удаления, если вы действительно хотите). Удаление неиспользуемых файлов из   каталог файлов по умолчанию, которые не находятся в управляемой файлами таблице.   AKA удаляет все неуправляемые файлы. Удаление неиспользуемых файлов из   целая установка, которые больше не привязаны к узлам & использование файла   Таблица. AKA удаляет все потерянные файлы.

ответил vgoradiya 26 Maypm16 2016, 14:38:18
0

Вы можете удалить неиспользуемый файл

  1. Удалить вручную из таблицы file_managed , по некоторому запросу, например

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

  2. Настройка статуса файла 0 , чтобы отметить это временный файл, поэтому cron удалит его через определенное время.
    $file = File::load ($fid); $file->setTemporary();

ответил Jasodeep Chatterjee 26 Maypm16 2016, 15:00:41
0

Модуль fancy file delete не работал для меня вообще. Вот более ручная альтернатива.

Чтобы удалить файлы из папки, не находящейся в таблице управляемых файлов, вы можете:

1) Создайте список всех управляемых файлов:

mysql whateverdb -e "select filename from file_managed" > ~/managed-files.txt

2) Удалите все файлы из каталога, отсутствующего в этом списке. Для этого я использовал небольшой скрипт 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

Просто измените переменную IMG_FOLDER на путь любой папки, из которой вы хотите удалить файлы (и обновите путь к своему исключаемому файлу)

ответил Felix Eve 15 Mayam17 2017, 06:41:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132