如何在php中找到目录树中的最大文件?

时间:2010-06-23 19:08:24

标签: php move

我有一个文件夹,其中包含其他文件夹,这些文件夹可能包含也可能不包含文件可能驻留的其他文件夹。我想扫描整个目录结构,找到大于100MB的文件,并将这些文件移到顶级目录。

什么是在PHP中实现这一目标的好方法?

例如:

/data/1/subfolder/id33/big_file.avi
/data/4/another_big_file.avi
/data/56/something/big_file2.avi

我需要将这3个文件移到/data

3 个答案:

答案 0 :(得分:2)

只需使用

扫描所有子文件夹即可
$it = new RecursiveDirectoryIterator("/data");
foreach(new RecursiveIteratorIterator($it) as $file) {
    //work with file (which is simplya a path here actually) here
}

你会在那里添加一些条件,例如

if (filesize($file) > 100e6) {
    rename($file, '/data/filename...');
}

答案 1 :(得分:1)

class MyFilterIterator extends FilterIterator {
    public function accept() {
        return $this->getSize() > 100*1024*1024;
    }
}

$it = new MyFilterIterator(new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator("/data")));

foreach($it as $file) {
    //move ...
}

答案 2 :(得分:0)

如果您使用SPL中的DirectoryIterator来浏览目录,甚至可以根据需要递归到目录中。要执行下一步,您可以使用过滤器按文件大小过滤结果,然后执行所需操作。

以下是一个粗略的例子:http://www.phpro.org/tutorials/Introduction-to-SPL-DirectoryIterator.html#17