获取整个文件夹/文件树并重命名

时间:2018-10-23 10:47:58

标签: php rename glob

我在admin文件夹(Windows,本地主机)中有一个文件夹/文件树。

所有文件均为.html

其中每个(文件和文件夹)都以一些数字和中间的破折号开头

32-somefolder
624-somefile.html

我需要列出所有这些名称,并从其名称中删除所有前缀。 所以结果应该是:

somefolder
somefile.html

foreach(glob("admin/*") as $el) {
        echo $el . '.' . filetype($el) . '<br>';
    }

第一个问题-仅列出文件夹:

admin/32-somefolder.dir

如何获取文件以及如何重命名,即从所有名称中删除前缀?

2 个答案:

答案 0 :(得分:0)

您可以使用第二个选择列出文件:scandir和递归函数:

function removePrefixFiles($dir, &$results = array()){
    $files = scandir($dir);

    foreach ($files as $key => $value){
        $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
        if (! is_dir($path)) {
            // treat the filename
            $file = pathinfo($path);
            $filename = explode('-', $file['filename']);

            if (count($filename) > 0) {
                // '-' is found, rename file
                rename($path, $file['dirname'] .'/'. $filename[1] .'.'. $file['extension'];
            }
            $results[] = $path;
        } else if ($value != '.' && $value != '..') {
            removePrefixFiles($path, $results);
            $results[] = $path;
        }
    }

    // no real need to return something here, but can log the files
    return $results;
}

$dir = '/admin';
removePrefixFiles($dir);

答案 1 :(得分:0)

我在admin /名称中创建了两个文件夹,

1个文件和2个abc

然后在文件夹1个文件中,我有两个文件

11-java.html

11-text.html

然后在2-abc文件夹中,我有两个文件

22-php.html

22-sql.html

<?php 
$dir = "admin/";

// Sort in ascending order - this is default
$a = scandir($dir);
echo "<pre>";
if(count($a)>0){
    $newArr = array();
    for($i=2;$i<count($a);$i++){
        $test = array();
        $folderArr = array();
        $folderName = explode('-',$a[$i]);
        $test['folder'] = $folderName[1];
        $b = scandir($dir.'/'.$a[$i]);

        for($j=2;$j<count($b);$j++){
            $fileName    =  explode('-',$b[$j]);
            $folderArr[] = substr($fileName[1], 0, strpos($fileName[1], "."));;
        }

        $test['files'] = $folderArr;
        $newArr[] = $test;
    }
}
print_r($newArr);
?>

这将是输出

Array
(
    [0] => Array
        (
            [folder] => files
            [files] => Array
                (
                    [0] => java
                    [1] => text
                )

        )

    [1] => Array
        (
            [folder] => abc
            [files] => Array
                (
                    [0] => php
                    [1] => sql
                )

        )

)

希望这会吓到你。