php - 通过PHP递归删除匹配文件

标签 php matching delete-file

我最近重新设计了我们网站上一些图像的命名约定。当我上传更改名称的图像时,我最终得到了重复的图像,一份使用旧命名约定,另一份使用新命名约定。这些图像数以千计,所以我不想手动将它们全部删除。

所以我决定需要找出一个能够从网站删除旧图像的 PHP 脚本。幸运的是,旧图像的命名始终以 f.jpg 或 s.jpg 结尾。所以我所要做的就是找到所有具有这些结尾的文件并将其删除。我认为这是一件相当简单的事情,但无论出于何种原因,我在网上找到的几种不同的解决方案都无法正常工作。我最终回到了一些旧代码 posted on Stackoverflow出于不同的目的并为此重新设计了它。我发布该代码作为我的问题的答案,以防它对其他人有用。

最佳答案

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

一如既往,在使用可能影响大量文件的代码时,请务必进行备份,以防代码无法按您预期的方式工作。

<?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/>";
    ?>

此代码的一个有趣的好处是,它将列出正在删除的文件并告知运行时间。

关于php - 通过PHP递归删除匹配文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31485870/

相关文章:

PHPSpreadsheet:为时间格式化单元格还包括日期

php - Laravel:如果用户在路由中手动输入ID,如何抛出403?

php - 语义错误 - 找不到常量 X,类...错误

algorithm - 根据偏好的相似性将两个元素(人)匹配在一起

php - 存储网站数据 - JSON 与 SQL

python - 在 Python 中找到最匹配的 block /补丁

java - 检查Java中代码块是否正确嵌套?

c# - 从文件夹中删除超过 4 天的文件

java - 可以提取文件但无法删除文件

android - 删除数据库文件夹内部存储