我有一个文件夹,其中包含其他文件夹,这些文件夹可能包含也可能不包含文件可能驻留的其他文件夹。我想扫描整个目录结构,找到大于100MB的文件,并将这些文件移到顶级目录。
什么是在PHP中实现这一目标的好方法?
例如:
/data/1/subfolder/id33/big_file.avi
/data/4/another_big_file.avi
/data/56/something/big_file2.avi
我需要将这3个文件移到/data
答案 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