Хостинг. Удаление некоторых файлов из заданной папки

tgr_85
3 року
0

Здравствуйте.
Связка Joomla+K2 генерирует кучу ненужных картинок к статьям и скидывает их все в одну папку.

Подскажите, пожалуйста, способ, чтобы средствами хостинга (может скрипт какой-то) удалить неиспользуемые картинки из заданной папки.

Известно путь к папке, и что все неиспользуемые файлы заканчиваются, к примеру, на _XL.jpg

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

Сергей М.
3 року
1

Самое простое что приходит в голову - добавить в крон задачу
/usr/bin/rm -rf /home/имя хостинг аккаунта/путь к директории/*_XL.jpg

tgr_85
3 року
0

Спасибо!
Попробую и отпишусь завтра.

tgr_85
3 року
0

Пишет такое:
nice: /usr/bin/rm: No such file or directory
Код получился такой:
/usr/bin/rm -rf /home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg
Может www не надо?

Еще на одном форуме подсказали сделать и запустить такой php файл:

<?php

function udoli($dirname)
{
    $files = glob($dirname . '/*', GLOB_MARK);

    foreach ($files as $file) {

        if (substr($file, -1) == '/') {
            udoli($file);
        } else {
            if (preg_match('#XS.jpg#Usi', $file, $est))
                unlink($file);
        }
    }
}
udoli('/путь/к/папке');
?>


Правда я пока не понял, как его запустить...

zinenko_s
3 року
2

/usr/bin/rm -rf /home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg
Может www не надо?
© tgr_85

Попробуйте указать просто команду так rm -rf /home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg


Еще на одном форуме подсказали сделать и запустить такой php файл: © tgr_85


Можно сделать скрипт куда проще, к примеру так

<?php
$path = "/home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg";
shell_exec("rm -rf $path");
?>
При этом можно задать дополнительные параметры отбора файлов и управлять какими либо масками.
И потом можно создать обычную крон задачу и поставить ее выполнение раз в сутки указав этот скрипт или же открыв скрипт в браузере то есть к примеру скрипт будет в /home/имя хостинг аккаунта/домен/www/delete.php то его запуск можно произвести просто открыв в браузере домен/delete.php

Так же можно использовать такого способа команды для удаления файла которые существуют более указанного срока, пример на срок жизни файлов более двух суток с даты last modified
find /home/имя хостинг аккаунта/путь к директории/ -type f -name "*_XL.jpg" -mtime +2 -exec rm -rf {} \;

детальное описание команд Вы можете получить при помощи такого сервиса как www.explainshell.com (вот ссылка на описание вышеуказанной команды url.verliber.space/amY )

Сергей М.
3 року
2

Пишет такое:
nice: /usr/bin/rm: No such file or directory
Код получился такой:
/usr/bin/rm -rf /home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg
© tgr_85

Попробуйте заменить путь к исполняемому файлу на /bin/rm
/bin/rm -rf /home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg
Посмотреть путь к исполняемым файлам можно командой
# command -v "rm"
/bin/rm

tgr_85
3 року
1

Сработал скрипт:

<?php
$path = "/home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg";
shell_exec("rm -rf $path");
?>

И крон:
/bin/rm -rf /home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg

Всем спасибо большое!

Natali.host
10 місяців
0

<?php
$path = "/home/имя хостинг аккаунта/домен/www/путь к директории/*_XS.jpg";
shell_exec("rm -rf $path");
?>
Этот скрипт можно юзать не только к определенным файлам но и к директориям?

zinenko_s
10 місяців
0

Если Вам нужна периодическая очистка каталога, то лучше воспользоваться инструкцией по созданию крон задачи для очистки каталога 2.11.9. Автоматическая очистка каталога [Хостинг Украина]

Natali.host
10 місяців
0

Ок как быть если будет закрыт shell_exec?

zinenko_s
10 місяців
0

Не стоит решать такую задачу средствами php, так как куда проще создать крон задачу которая будет работать быстрее и лучше.

Если же, все таки, требуется использование php скрипта, к примеру для создания сложной логики очистки каталогов и прочее, но при этом закрыты все функции вызова системных команд (shell_exec\exec\system\proc_open\etc), то лучше использовать функцию PHP unlink() www.php.net/manual/ru/function.unlink.php , к примеру таким образом можно задать удаление файлов в каталоге:

$path = "/home/user/domain.com/www/dir/";

if (www.php.net/file_exists($path)) {
      foreach (www.php.net/glob("$path*_XS.jpg") as $file) {
          www.php.net/unlink($file);
      }
}


Вместо '_XS.jpg' укажите нужный тип файла или часть его имени. Но этот код не удалит каталог, для этого его нужно будет усложнить т.к. PHP не может удалить не пустой каталог.
А какая именно задача у Вас стоит?