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

时间:2015-08-21 15:07:28

标签: php rename scandir

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

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

到目前为止我的代码:

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您可以使用递归函数执行此操作。

if not isinstance(temp[count], complex):
    print(temp[count])
    count += 1

这基本上遍历一个目录,如果某个东西是一个重命名它的文件,如果某个东西是它在该目录上运行的目录。

答案 1 :(得分:0)

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

使用此文件系统:

<link href="http://netdna.bootstrapcdn.com/bootstrap/2.0.4/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://rawgit.com/cletourneau/angular-bootstrap-datepicker/master/dist/angular-bootstrap-datepicker.css" rel="stylesheet"/>
<body ng-app="demo">
<div>
        <div data-ng-controller="AppCtrl">
            <input id="datepicker" type="text" data-ng-datepicker data-ng-options="datepickerOptions" data-ng-model="date">

       
<br>
    <button data-ng-click="ukFormat()">UK Format</button>
    <button data-ng-click="usFormat()">US Format</button>
<hr>    
    "Selected format: "{{format}} {{datepickerOptions.format}}
</div> 
</div>
<script src="http://code.jquery.com/jquery-2.0.2.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/2.0.4/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<script src="https://rawgithub.com/cletourneau/angular-bootstrap-datepicker/master/dist/angular-bootstrap-datepicker.js" charset="utf-8"></script>
</body>

代码:

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));
    }
}

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

答案 2 :(得分:0)

尝试那样

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");
        }
    }
}