PHP и изтриване на файлове

IBMcho

Member
Здравейте,
Някой може ли да ми каже как с PHP мога да изтрия много снимки на куп съдържаща определена дума в името на самата снимка.
Искам да изтрия определен брой снимки (може би около 5000) от типа 24234-large.jpg 123123-43234-large.jpg edikakvosi-large.jpg
Т.е. ако съдържа думата -large с тиренцето в нея да я изтрива.
Пробвах се да направя нещо подобно с unlink(), но нещо не стана :/

Благодаря предварително!
 
От: PHP и изтриване на файлове

А защо ти е php?

rm -f *-large.jpg
 
От: PHP и изтриване на файлове

Ето това ползвам, трие директории поддиректории и файловете в тях по зададен regex.

PHP:
function Delete($path)
{
    if (is_dir($path) === true)
    {
        $files = array_diff(scandir($path), array('.', '..'));

        foreach ($files as $file)
        {
            Delete(realpath($path) . '/' . $file);
        }

        return rmdir($path);
    }

    else if (is_file($path) === true)
    {
        return unlink($path);
    }

    return false;
}


	$dirpath = '.';  // '.' for current (внимавай да не изтриеш всичко, първо тествай)
	$path = '';
	foreach (new DirectoryIterator($dirpath) as $file) 
	{
		if ($file->isDot()) continue;

		if ($file->isDir()) {
			$path =  $file->getFilename();
		}
		$patterns = array("large", "some_string"); // задаваш си каквото искаш 
        $regex = '/(' .implode('|', $patterns) .')/i';
		
		if (preg_match($regex, $path)) 
		{
			
			Delete($path);
		
		} 
		
	}
 
От: PHP и изтриване на файлове

Въпрос: На този хостинг (вероятно си на споделен хостинг) можеш ли да пускаш system, exec и shell_exec (все php функции)?
Ако да, пускаш с exec:
exec('rm ПЪТ_ДО_ДИРЕКТОРИЯТА/*ФРАЗА*');
Ако не:
<?php
$dir_path = 'НЯКАКЪВ ПЪТ ДО ДИРЕКТОРИЯ';
$regex = 'НЯКАКЪВ РЕГУЛЯРЕН ИЗРАЗ';

if (!@is_dir($dir_path)){
echo("Invalid path to directory\n");
exit();
}
$dir = opendir($dir_path);
while($f_name = readdir($dir)){
if (($f_name == '.') || ($f_name == '..')){
continue;
}
if (preg_match('@' . $regex . '@', $f_name)){
$full_path = $dir_path . '/' . $f_name;
echo("Delete: $full_path\n");
@unlink($full_path) or die("$f_name can't be deleted\n");
}
}
closedir($dir);
echo("Complete\n");
?>
Това второто работи с регулярни изрази (PCRE). Мисля, че лесно може да си го нагласиш според конкретните ти нужди. Тази джаджа не работи рекурсивно, т.е. не трие в поддиректории на посочената, а трие само файлове в посочената.
 
От: PHP и изтриване на файлове

В крайна сметка писах на съпорта и ми ги изтриха набързо.
Иначе и те също ми казаха, че най - добре ще е с rm -f *-large.jpg

поздрави и мерси за отговорите :roll:
 

Горе