列出所有子目录中的所有*.jpg文件并复制到新文件夹



我用所有的铃声和口哨声建立了一个自定义的光子气象站。最后一步是安装一台太阳能相机,它将把照片上传到我的一台服务器上,然后再传给其他天气网站。

我的问题是,我无法控制相机如何将文件上传到FTP。基本上,它会创建一个主目录,然后随着时间的推移创建一个子目录。示例\2020301218image.jpg

我的问题:我需要扫描目录和子目录中的*.jpg文件,然后将它们移到另一个目录中。

对PHP不是很了解,但设法通过一个目录实现了这一点。以下代码:

rename(reset(glob("/home/public_html/old_directory/*.jpg")), "/home/new_directory/weather.jpg");

有没有什么简单的方法可以修改上面的内容来查看所有目录?玩递归函数,看看这是否能帮助我。

如果一次只有一个文件,可以执行以下操作:

$files = glob('/home/public_html/*/*.jpg');
rename(reset($files), '/home/new_directory/weather.jpg');

如果一次有多个文件,那么你可以做一些类似的事情:

$files = glob('/home/public_html/*/*.jpg');
foreach ($files as $file) {
rename($file, '/home/new_directory/' . basename($file));
}

第二种方法将保留原始文件名,所以除非你有其他方法来命名这些文件,这样它们就不会相互覆盖,否则这将是将它们分开的最佳方法。不过你得小心碰撞。如果两个文件名相同的文件在两个不同的目录中,那么您应该用第二个覆盖第一个。

不过,现在我意识到了,这会产生一个问题,因为它也会从new_directory中拾取图像。你必须将新上传的内容放到一个子文件夹中,这样才能避免这种情况。例如:

$files = glob('/home/public_html/upload_directory/*/*.jpg');
rename(reset($files), '/home/new_directory/weather.jpg');

或者对于多个

$files = glob('/home/public_html/upload_directory/*/*.jpg');
foreach ($files as $file) {
rename($file, '/home/new_directory/' . basename($file));
}

如果你花时间使用递归,你会更好地控制这类事情。

最新更新