php читает директорию и переименовывает папки - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь пройти по каталогу и переименовать все папки с определенным именем с добавлением оригинального имени папки в конце. Он работает, за исключением того, что часто добавляет заголовок, который я хочу, 2,3,4 раза перед старым именем папки. Папки изначально являются числами, и я хочу добавить заголовок перед ними.

Код:

$skip = array(".","..","...");

$dir = '/Volumes/COMICS/MOVED/Marvel Comics/Avengers/Volume 2';
$t = 'Avengers Volume 2';

if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {
      if (!in_array($entry,$skip)) {
        $newName = $t." ".$entry;
        $ol = $dir."/".$entry;
        $nl = $dir."/".$newName;
        rename($ol,$nl);
      }
    }
    closedir($handle);
}

и как они названы тоже:

  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 9
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 11
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 7
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 6
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 1
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 10
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 8
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 4
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 3
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 12
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 2
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Volum e 2 / Мстители Том 2 13
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 5
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 9
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 11
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 7
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 1
  • / Тома / Комиксы / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 10
  • / Тома / Комиксы / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 4
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 3
  • / Тома / COMICS / MOVED / Комиксы Marvel / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 2
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 13
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 Мстители Том 2 9
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 Мстители Том 2 7
  • / Объемы / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 Мстители Том 2 3
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 Мстители Том 2 Мстители Том 2 9
  • / Тома / COMICS / MOVED / Marvel Comics / Мстители / Том 2 / Мстители Том 2 Мстители Том 2 Мстители Том 2 Мстители Том 2 Мстители Том 2 9

1 Ответ

0 голосов
/ 02 сентября 2018

Насколько я понимаю, дескриптор является указателем - и «данные», на которые он указывает, не являются фиксированными, но могут изменяться. Поэтому я предполагаю, что когда вы префиксируете папку в цикле while, переименованная папка также идентифицируется через дескриптор цикла while и снова префиксируется.

Вам может быть лучше использовать glob

$folders = glob( $dir . '/*' , GLOB_ONLYDIR);

чтобы вернуть массив подкаталогов и затем перебрать массив для переименования всех записей.

...