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
相关产品推荐
相关产品推荐

