получить целое дерево папок / файлов и переименовать - PullRequest
0 голосов
/ 23 октября 2018

У меня есть дерево папок / файлов в папке admin (windows, localhost).

Все файлы .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 голосов
/ 24 октября 2018

Я создал две папки внутри admin / name как

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
                )

        )

)

Надеждаэто поможет тебе.

0 голосов
/ 23 октября 2018

Вы можете использовать второй выбор списка файлов: 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);
...