0

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

在 php 中实现这一点的好方法是什么?

例如:

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

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

4

3 回答 3

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...');
}
于 2010-06-23T19:20:03.923 回答
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 ...
}
于 2010-06-23T19:18:51.270 回答
0

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

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

于 2010-06-23T19:18:55.253 回答