如何遍历所有带有特殊文件的子文件夹?

时间:2010-08-02 09:25:33

标签: php directory

我想遍历特定文件夹的所有子文件夹,并检查它们是否有特殊文件,否则删除子文件夹。

以此为例(file.txt是此处的特殊文件):

  • folder_all
    • folder1中
      • file.txt的
    • 文件夹2
      • file.txt的
    • folder3

因为“folder3”没有该文件,所以我想将其删除 这就是我想要做的。有什么想法吗?

非常感谢!

3 个答案:

答案 0 :(得分:2)

更新代码

您可以使用RecursiveDirectoryIterator类:

<?php

$dir = '/path/';
$file = '/filetosearch.txt';
$paths = array();

$i = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));

while($i->valid()) {

    if (!$it->isDot()) {

        $subpath = $it->getSubPath();

        if ($subpath != '') {
            // if inside a subdirectory
            // add the subpath in our array flagging it as false
            if (!array_key_exists($subpath, $paths) $paths[$subpath] = false;

            // check if it's our file
            if (substr_compare($i->getSubPathName(), $file, -strlen($file), strlen($file)) === 0)
                $paths[$subpath] = true;

    }

    $it->next();
}

// now check our paths array and delete all false (not containing the file)
foreach ($paths as $key => $value)
{
    if (!$value) rmdir($dir.$key);
}

?>

答案 1 :(得分:0)

只需遍历 folderall 的所有子文件夹,然后检查文件folder_all/$subfoldername/file.txt是否存在。如果没有,删除它。这应该是一个循环。

API:

答案 2 :(得分:0)

function recursive_delete_if_exists($path,$file) {
   foreach (glob($path.'/*.*') as $name)
      if (is_dir($name))
         recursive_delete_if_exists($name,$file);
      elseif ($name==$file)
         unlink($path);
}

recursive_delete_if_exists('/folder_all','file.txt');