-1

功能:

function scandir_recursive($dir) {
    $items = scandir($dir);

    foreach($items as $item) {
        if ($item == '.' || $item == '..') {
            continue;
        }

        $file = $dir . '/' . $item;
        echo "$file<br />";

        if (is_dir($file)) {
            scandir_recursive($file);
        }
    }
}
scandir_recursive($path);

输出:

EEAOC/EN/1001/data
EEAOC/EN/1001/data/New Text Document.txt
EEAOC/EN/1001/data/troll.txt
EEAOC/EN/1002/data
EEAOC/EN/1002/data/New Text Document.txt
EEAOC/EN/1002/data/troll.txt
EEAOC/EN/1003/data
EEAOC/EN/1003/data/New Text Document.txt
EEAOC/EN/1003/data/troll.txt
EEAOC/EN/1004/data
EEAOC/EN/1004/data/New Text Document.txt
EEAOC/EN/1004/data/troll.txt

是否可以删除那些空目录并保留文件?这样的删除EEAOC/EN/1001/data &EEAOC/EN/1002/data& EEAOC/EN/1003/data &EEAOC/EN/1004/data

我想留着怎么办?

4

1 回答 1

0

如您的函数输出所示,目录不为空。

我认为数据价值不高,只需要备份。我假设您选择的是斜杠而不是反斜杠来运行 Linux。自然地,目录会产生链接或 inode,带有元数据,在 linux 中可以通过以下方式检查

df -hi 

文件的 Inode-Id 可以通过 -i 标志显示ls

ls -i filename
ls -iltr
ls -ltri `echo $HOME`

索引节点占用空间,并在文件系统操作中引入开销。删除目录的动机如此之多。

PHPrmdir删除目录的功能需要The directory must be empty, and the relevant permissions must permit this. 它也是非递归的。

  • 方法 1:展平文件名并将文件移动到备份目录,然后删除空目录
  • 方法 2:增量归档和删除目录

#Approach 1
您的选择应取决于您的文件访问发生的容易程度和频率。

函数 scandir_recursive($dir) { $items = scandir($dir);

foreach($items as $item) {
    if ($item == '.' || $item == '..') {
        continue;
    }

    $file = $dir . '/' . $item;
    $fnameflat = $dir . '_' . $item;
    echo "$file<br />\n";
    if (is_dir($file)) {
        scandir_recursive($file);
    }
    if(is_file($file)){
        rename($file, '~/backup/'.$fnameflat);
    }
}

} scandir_recursive($path);

之后通过 SeniorDev使用此功能,取消链接文件和目录,或运行

`exec("rmdir -rf $path")`

不建议这样做。

#方法 2

exec("tar -cvzf backup".date().".tar.gz $path");使用或使用 php归档目录。

然后删除目录 aferwards,如 #1 中所述。

于 2013-09-08T17:13:37.550 回答