首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过PHP递归删除匹配文件

通过PHP递归删除匹配文件
EN

Stack Overflow用户
提问于 2015-07-17 22:56:30
回答 1查看 217关注 0票数 2

最近,我在我们的网站上重新设计了一些图片的命名惯例。当我上传带有更改名称的图像时,我最终得到了复制的图像,一份带有旧的命名约定,另一份带有新的命名约定。图像编号为数千,所以我不想手动删除它们全部。

因此,我决定我需要找出一个php脚本,它可以从站点中删除旧的图像。幸运的是,旧图像的命名始终与f.jpg或s.jpg的结尾。所以我所要做的就是找到那些结尾的所有文件并删除它们。我认为这是一件相当简单的事情,但无论出于什么原因,我在网上找到的几种不同的解决方案都没有奏效。最后,我回到了一些旧的代码,我有一个不同的目的posted on Stackoverflow,并对它进行了重新处理。我把这段代码作为我问题的答案,以防它对其他人有用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-17 22:56:30

下面是我在选定文件夹及其子文件夹中查找与某个命名约定匹配的文件并删除它们的解决方案。让它适合你的处境。您将希望将其放在要删除的目录之上,并通过替换我拥有./media/catalog/的部分来指定特定的文件夹。您还需要替换我所选择的标准,即(substr($path, -5)=='f.jpg' || substr($path, -5)=='s.jpg')。请注意,前面代码中的5指的是标准中匹配的字母数。如果您想简单地匹配".jpg“,您可以用4替换5。

和往常一样,在处理可能影响大量文件的代码时,请确保备份,以防代码不按您预期的方式工作。

代码语言:javascript
运行
复制
<?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/>";
    ?>

这段代码的一个有趣的好处是,它将列出正在删除的文件,并说明运行所需的时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31485870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档