最近,我在我们的网站上重新设计了一些图片的命名惯例。当我上传带有更改名称的图像时,我最终得到了复制的图像,一份带有旧的命名约定,另一份带有新的命名约定。图像编号为数千,所以我不想手动删除它们全部。
因此,我决定我需要找出一个php脚本,它可以从站点中删除旧的图像。幸运的是,旧图像的命名始终与f.jpg或s.jpg的结尾。所以我所要做的就是找到那些结尾的所有文件并删除它们。我认为这是一件相当简单的事情,但无论出于什么原因,我在网上找到的几种不同的解决方案都没有奏效。最后,我回到了一些旧的代码,我有一个不同的目的posted on Stackoverflow,并对它进行了重新处理。我把这段代码作为我问题的答案,以防它对其他人有用。
发布于 2015-07-17 22:56:30
下面是我在选定文件夹及其子文件夹中查找与某个命名约定匹配的文件并删除它们的解决方案。让它适合你的处境。您将希望将其放在要删除的目录之上,并通过替换我拥有./media/catalog/
的部分来指定特定的文件夹。您还需要替换我所选择的标准,即(substr($path, -5)=='f.jpg' || substr($path, -5)=='s.jpg')
。请注意,前面代码中的5指的是标准中匹配的字母数。如果您想简单地匹配".jpg“,您可以用4替换5。
和往常一样,在处理可能影响大量文件的代码时,请确保备份,以防代码不按您预期的方式工作。
<?php #stick ClearOldJpg.php above the folder you want to delete
function ClearOldJpg(){
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("./media/catalog/"));
$files = iterator_to_array($iterator, true);
// iterate over the directory
foreach ($files as $path) {
if( is_file( $path ) && (substr($path, -5)=='f.jpg' || substr($path, -5)=='s.jpg')){
unlink($path);
echo "$path deleted<br/>";
}
}
}
$start = (float) array_sum(explode(' ',microtime()));
echo "*************** Deleting Selected Files ***************<br/>";
ClearOldJpg( );
$end = (float) array_sum(explode(' ',microtime()));
echo "<br/>------------------- Deleting selected files COMPLETED in:". sprintf("%.4f", ($end-$start))." seconds ------------------<br/>";
?>
这段代码的一个有趣的好处是,它将列出正在删除的文件,并说明运行所需的时间。
https://stackoverflow.com/questions/31485870
复制相似问题