You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP递归遍历子文件夹批量替换文件名指定子串

解决方案

可以使用PHP的递归目录迭代器实现遍历所有子文件夹并批量重命名文件,以下是适配需求的完整代码:

<?php
$rootDir = '/path/to/cache'; // 替换为你的cache目录绝对路径

// 创建递归目录迭代器,自动遍历所有子目录
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootDir, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::LEAVES_ONLY // 仅遍历文件,跳过目录本身
);

foreach ($iterator as $file) {
    if ($file->isFile()) {
        $oldFullPath = $file->getPathname(); // 获取文件完整原路径
        $oldFileName = $file->getFilename(); // 获取原文件名
        
        // 替换文件名中的指定子串
        $newFileName = str_replace('image1', 'great', $oldFileName);
        $newFullPath = $file->getPath() . DIRECTORY_SEPARATOR . $newFileName; // 生成文件完整新路径
        
        // 仅当文件名确实需要修改时执行重命名
        if ($oldFileName !== $newFileName) {
            rename($oldFullPath, $newFullPath);
        }
    }
}
?>

关键细节说明:

  • 递归遍历逻辑:RecursiveDirectoryIterator负责遍历目录结构,搭配RecursiveIteratorIterator自动深入所有子文件夹;SKIP_DOTS参数跳过.和..特殊目录,避免无效遍历。
  • 路径正确性保障:原代码直接使用文件名执行rename会导致路径错误,这里通过getPathname()获取文件完整绝对路径,确保重命名操作在对应子文件夹内执行。
  • 冗余操作规避:增加$oldFileName !== $newFileName判断,避免对无需修改的文件执行无效操作。
  • 权限要求:请确保PHP进程对目标cache目录及其所有子文件夹拥有读写权限,否则重命名会失败。
  • 测试建议:建议先在测试环境验证代码效果,确认无误后再在生产环境执行。

内容的提问来源于stack exchange,提问作者Kankan2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:36:08