重命名不同子目录中的所有文件

Renaming all files within different sub directories

我正在尝试将目录中的文件重命名为小写,但我遇到的问题是能够扫描文件的子目录。

所以在这种情况下 $app_dir 是主目录,我需要更改的文件存在于多个子文件夹中。

到目前为止,这是我的代码:

$files = scandir($app_dir);
foreach($files as $key=>$name){
$oldName = $name;
$newName = strtolower($name);
rename("$app_dir/$oldName","$app_dir/$newName");
}

感谢您的帮助。

你可以用递归函数来做到这一点。

function renameFiles($dir){
    $files = scandir($dir);
    foreach($files as $key=>$name){
        if($name == '..' || $name == '.') continue;
        if(is_dir("$dir/$name"))
            renameFiles("$dir/$name");
        else{
            $oldName = $name;
            $newName = strtolower($name);
            rename("$dir/$oldName", "$dir/$newName");
        }
    }
}

这基本上循环遍历一个目录,如果某物是一个文件,它会重命名它,如果某物是一个目录,它会在该目录上自行运行。

如果您尝试将所有文​​件名小写,您可以试试这个:

使用这个文件系统:

Josh@laptop:~$ find josh
josh
josh/A
josh/B
josh/f1
josh/f2
josh/is
josh/is/awesome
josh/is/awesome/e
josh/is/awesome/t

代码:

<?php
$app_dir = 'josh';
$dir = new RecursiveDirectoryIterator($app_dir, FilesystemIterator::SKIP_DOTS);
$iter = new RecursiveIteratorIterator($dir);
foreach ($iter as $file) {
    if ($file != strtolower($file)) {
        rename($file, strtolower($file));
    }
}

结果:

Josh@laptop:~$ find josh
josh
josh/a
josh/b
josh/f1
josh/f2
josh/is
josh/is/awesome
josh/is/awesome/e
josh/is/awesome/t

此代码不考虑目录中的大写字母,但这取决于您。

像那样尝试

public function renameFiles($dir)
{
    $files = scandir($dir);
    foreach ($files as $key => $name) {
        if (is_dir("$dir/$name")) {
            if ($name == '.' || $name == '..') {
                continue;
            }
            $this->renameFiles("$dir/$name");
        } else {
            $oldName = $name;
            $newName = strtoupper($name);
            rename("$dir/$oldName", "$dir/$newName");
        }
    }
}