重命名php中目录的所有子目录

时间:2019-06-17 20:41:43

标签: php

我的目录结构如下:

.
├── uploads
|   ├── 1
|   |   ├── example.jpeg
|   |   └── example.jpeg
|   ├── 2
|   |   └── example.jpeg
|   ├── 3
|   |   ├── example.jpeg
|   |   ├── example.jpeg
|   |   └── example.jpeg

我希望重命名我的存储区uploads中的所有目录(在我的示例中,这些目录分别称为123)。我想根据它们的当前名称重命名所有这些目录。例如,我希望1成为1asd2变成2asd,而3变成3asd。我一直在寻找类似的问题,并发现This one(虽然这个问题似乎实际上与其他问题有关)和this one,这与重命名文件有关。 我尝试过:

if ($handle = opendir('../path/to/uploads')) {
    while (false !== ($fileName = readdir($handle))) {
        $newName = $fileName.'asd';
        rename($fileName, $newName);
    }
    closedir($handle);
}

这不起作用,因为所有$filename始终都是.。我的猜测是因为它与目录有关,而不是文件。我该如何定位目录?

side-note1 :我想重命名的目录包含我不想丢失/删除的文件。在我的示例中,它们都称为example.jpeg

side-note2 :我的uploads目录的路径正确,我对此进行了测试。

3 个答案:

答案 0 :(得分:1)

使用globrename

确保从正确的目录运行此文件,或相应地更改路径。

如果您的PHP脚本位于uploads的父目录下,则按原样工作

foreach (glob("uploads/[1|2|3]",GLOB_ONLYDIR) as $filename) {
    rename($filename, $filename."asd");
}

在有多个目录的情况下,以上内容将更改为以下内容:

$directories = array_merge_recursive(glob("uploads/[0-9]*[0-9]",GLOB_ONLYDIR),glob("uploads/[0-9]",GLOB_ONLYDIR));

foreach ($directories as $directory) {
    rename($directory, $directory."asd");
}

glob("uploads/[0-9]*[0-9]",GLOB_ONLYDIR)匹配从一个数字到一个数字的所有内容。

glob("uploads/[0-9]",GLOB_ONLYDIR)匹配名称具有单个数字的任何目录。

答案 1 :(得分:0)

您要检查以确保它是目录,并检查它是否不是当前目录.或父目录..

if(is_dir($fileName) && $fileName!= "." && $fileName!= "..") {
   $newName = $fileName.'asd';
   rename($fileName, $newName);
}

此外,由于mcserep指出 $newName = $fileName.'asd');中存在语法错误,请注意右括号。

答案 2 :(得分:0)

经过反复试验,我设法找到了解决方案:

$dir = '../path/to/uploads/';

if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($filename = readdir($dh)) !== false) {
                    if($filename!= "." && $filename!= "..") {
                        rename($dir.$filename, $dir.$filename."asd");
                    }
        }
        closedir($dh);
    }
}