Удалить неиспользуемые в нодах картинки Drupal 7

Главные вкладки

Аватар пользователя kovalevm kovalevm 9 августа 2015 в 22:28

Добрый день!
Нужна помощь в решении проблемы. Сайт был перенесен с Drupal 6 на Drupal 7. В старой версии использовался редактор TinyMCE, загрузка файлов происходила с помощью Wysiwyg imageupload.
После переноса было удалено много нод, к которым были привязаны картинки. Но изображения остались на сервере.
Есть ли какое-нибудь решение для их удаления? Не всех изображений, которые когда-то были загружены через Wysiwyg imageupload, а именно тех, чьи ноды были удалены.

ВложениеРазмер
Иконка изображения untitled-1.jpg47.24 КБ

Комментарии

Аватар пользователя kovalevm kovalevm 10 августа 2015 в 10:54

Nikit wrote:
Кстати, есть еще простой вариант: https://www.drupal.org/project/fancy_file_delete[/quote]
Да, этот вариант уже испытал. У меня "Internal Server Error" - при выделенной памяти 512 Мб, слишком большое количество материала.
Не нашел, как можно решить проблему.

Аватар пользователя ttenz ttenz 22 мая в 15:08

Вот здесь дан хороший скрипт. Я пользовался им несколько раз, всё супер! Модуль Fancy File Delete у меня почему то не отображает удаление.

Я скопирую сюда команды, а объяснение в статье.

Сделайте дамп базы данных и разместите его в корне сайта
Там же создайте файл с расширением .sh, например dfindfiles.sh и поместите в него следующий код:

#!/bin/sh
START=./sites/default/files
CURDIR=`pwd`
IG_STYLES=./styles/*
IG_JS=./js/*
IG_CSS=./css/*

dbdump=`pwd`/dumpwebsite.sql
usedfile=`pwd`/output_used.txt
notusedfile=`pwd`/output_notused.txt
notusedfile_check=`pwd`/output_notused_check.txt

cd ${START}
echo "Step 1. Checking for used and unused files to database..."
echo "$(date) $line"
for file in `find . ! -path "$IG_JS" ! -path "$IG_CSS" ! -path "$IG_STYLES" -type f -print | cut -c 3- | sed 's/ /#}/g'`
do
  file2=`echo $file | sed 's/#}/ /g'`
  file3=`basename $file2`
  result=`grep -c "$file3" $dbdump`
  if [ $result = 0 ]; then
    echo $file2 >> $notusedfile
  else
    echo $file2 >> $usedfile
  fi
done
cd ${CURDIR}

echo "Step 2. Checking files from list not used files..."
echo "$(date) $line"
for p in $(cat $notusedfile); do
  grep -rnw --include=*.{module,inc,php,js,css,html,htm,xml} ${CURDIR} -e $p  > /dev/null || echo $p >> $notusedfile_check;
done

echo "Files checking done."
echo "Check the following text-file for results:"
echo "$notusedfile_check"

В файле output_notused_check.txt находятся файлы, готовые к удалению.
Скопируйте этот файл в директорию старта сканирования. В нашем примере это sites/default/files.

Перейдите в ту же директорию и выполните команду:

xargs rm -fr < output_notused_check.txt

Здесь происходит удаление файлов из файла output_notused_check.txt

После удаления зайдите на сайт и убедитесь, что все изображения загружаются и отображаются.
Далее перейдите в корень сайта и удалите файлы: dumpwebsite.sql, output_used.txt, output_notused.txt и output_notused_check.txt.

Аватар пользователя ttenz ttenz 22 мая в 16:19

ttenz wrote: Я пользовался им несколько раз, всё супер!

Но обязательно проверять output_notused.txt, туда могут попасть и не картинки!

Оставляем только картинки:
sed -i '/\.\(jpg\|jpeg\|png\|gif\|webp\|svg\|bmp\)$/!d' output_notused.txt