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

Posted

技术标签:

【中文标题】列出所有子目录中的所有 *.jpg 文件并复制到新文件夹【英文标题】:Listing all *.jpg files in all sub directory and copy to new folder 【发布时间】:2021-04-07 04:12:13 【问题描述】:

我构建了一个带有所有花里胡哨的自定义 Photon 气象站。最后一步是安装一个太阳能摄像头,它将照片上传到我的一个服务器,然后将其传递到其他天气网站。

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

我的问题: 我需要扫描目录和子目录中的任何 *.jpg 文件,然后将它们移动到不同的目录。

php 不是很了解,但设法使用单个目录来解决这个问题。代码如下:

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

是否有任何简单的方法可以修改上述内容以查看所有目录?玩一个递归函数,看看这是否可以帮助我。

【问题讨论】:

总是只有一个文件还是可以是多个文件? 可能是多个文件,但不要介意我可以将最新的文件复制到新目录 【参考方案1】:

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

$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));

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

【讨论】:

嗨劳伦斯。非常感谢你,伙计。玩你的代码,似乎工作正常。无法相信它是如此简单。正在查看变量/通配符以显示目录,并注意到它只是一个简单的“*”再次感谢您,祝您新年快乐。 谢谢@JakesOosthuizen,请用检查标记答案是否解决了您的问题。

以上是关于列出所有子目录中的所有 *.jpg 文件并复制到新文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Python:读取文本文件并将其中列出的目录复制/粘贴到新目录

在Unix中递归列出文件中的所有文件? [复制]

用glob列出目录中的所有文件

请问用shell做个脚本列出目录文件并可选择打开一个文件。

如何在使用查找时列出没有绝对路径的目录中的所有文件及其文件大小

c#如何复制文件夹到新目录