簡體   English   中英

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

[英]rename all subdirectories of directory in php

我有這樣的目錄結構:

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

我要重命名在我firectory所有目錄uploads (在我的例子,這些被稱為123 )。 我想根據它們的當前名稱重命名所有這些目錄。 例如,我希望1變為1asd2變為2asd3變為3asd 我一直在尋找類似的問題,並發現了這個問題(盡管這個問題看起來實際上與其他問題有關)和這個問題 (有關重命名文件)。 我試過了:

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目錄的路徑正確,我對此進行了測試。

使用glob rename

確保從正確的目錄運行此文件,或相應地更改路徑。

如果您的PHP腳本位於uploads的父目錄中, 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)匹配從數字開始到結尾為1的所有內容。

glob("uploads/[0-9]",GLOB_ONLYDIR)匹配名稱具有單個數字的任何目錄。

您要檢查以確保它是一個目錄,並檢查它是否不是當前目錄. 或父..目錄:

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

另外,如mcserep 所述, $newName = $fileName.'asd');有語法錯誤$newName = $fileName.'asd'); ,請注意右括號。

經過反復試驗,我設法找到了解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM