我有一个文件夹,其中包含其他文件夹,这些文件夹可能包含也可能不包含文件可能驻留的其他文件夹。我想扫描整个 dir 结构,找到大于 100MB 的文件,并将这些文件移动到顶级目录。
在 php 中实现这一点的好方法是什么?
例如:
/data/1/subfolder/id33/big_file.avi
/data/4/another_big_file.avi
/data/56/something/big_file2.avi
我需要将这 3 个文件移动到/data
只需扫描所有子文件夹
$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...');
}
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 ...
}
如果您使用 SPL 中的DirectoryIterator浏览目录,甚至在需要时递归到该目录。要进行下一步,您可以使用过滤器按文件大小过滤结果,然后执行您需要的操作。
这是一个粗略的例子:http ://www.phpro.org/tutorials/Introduction-to-SPL-DirectoryIterator.html#17