Get all file all subfolders and all hidden file with glob

前端 未结 6 1839
故里飘歌
故里飘歌 2020-12-17 23:28

In my recurive function to zip a whole folders i have this piece of code glob($path. \'/*\') that give me all files and subfolders matching my $path.

Here I read

6条回答
  •  Happy的楠姐
    2020-12-18 00:12

    I am answering here in case anyone else is looking as this appears high on Google.

    Solution 1 - glob only

    This uses a glob that is tailored to skip '.' and '..' special directories. It matches anything that:

    • isn't hidden with a '.'
    • is hidden with a '.' but is followed a non '.' character
    • starts with '..' but has at least one character after it
    $globbed = glob("{*,.[!.]*,..?*}", GLOB_BRACE);
    var_dump($globbed);
    

    Solution 2 - globignore

    This is a function to mimic the behaviour of globignore in bash.

    function globignore(array $ignore, $glob, $glob_flags = 0)
    {
        $globbed = glob($glob, $glob_flags);
        return array_filter($globbed, function ($f) use ($ignore)
        {
            $base = basename($f);
            foreach($ignore as $i)
            {
                if ($i == $base) return false;
            }
            return true;
        });
    }
    $globbed = globignore(['.','..'], "{*,.*}", GLOB_BRACE);
    var_dump($globbed);
    

    They appear to execute in almost exactly the same time on my system. Solution 1 requires less code but solution 2 is easier to include more terms to ignore.

提交回复
热议问题