将以特定名称结尾的所有文件复制到另一个目录

时间:2013-08-02 18:45:19

标签: php

这是我如何保存图像并为其创建缩略图,每个图像可能有不同尺寸的不同缩略图

    original image :
     abc.jpg

    thumbnails :

    100X150_abc.jpg
    80X80_abc.jpg
etc...

现在我犯了一个错误,我的几百张图片已保存在错误的目录中 我知道原始图像的名称,但我不确定缩略图

我的所有图片都有一个唯一的名称,因此我可以使用其名称识别缩略图,但缩略图中名称的开头部分是动态的。

假设我想从06目录中的07目录复制我的abc.jpg

rename('images/06/abc.jpg', 'images/07/abc.jpg');

但是我可以对缩略图做些什么呢?有这样的正则表达式吗?

喜欢!

rename('thumbs/06/^_abc.jpg', 'thumbs/07/^_abc.jpg');

基本上我想将所有以特定名称(如_abc.jpg)结尾的图像复制到另一个目录

3 个答案:

答案 0 :(得分:3)

glob()函数支持*作为通配符(但没有完整的正则表达式支持)。它返回一组匹配的文件名:

$from = '/absolute/path/thumbs/06/';
$to   = '/absolute/path/thumbs/07/';
chdir($from); // in this way glob() can give us just the file names
foreach(glob('*_abc.jpg') as $name) {
    rename($from.$name, $to.$name);
}

glob()函数不是很清楚,但在这种情况下非常方便,因为其他PHP文件函数不支持通配符之类的东西。

答案 1 :(得分:1)

以下是应该有效的代码:

<?php
$olddir = "./images/06/";
$newdir = "./images/07/";
$files = scandir($olddir);
$count = count($files);
echo $count;
$x = 2;
while($x < $count)
    {
    echo $files[$x];
    $len = strlen($files[$x]);
    $sub = substr($files[$x], $len-7, 7);
    if($sub === "abc.jpg")
        {
        rename($olddir.$files[$x],$newdir.$files[$x]);
        }
    $x++;
    }
?>

这会将06文件夹中以abc.jpg结尾的所有文件移动到07文件夹。

如果它不起作用,请告诉我.... :)

答案 2 :(得分:0)

如果您希望所有以abc开头的文件都使用rename('images/06/*abc.jpg', 'images/07/*abc.jpg');

,请使用rename('images/06/*_abc.jpg', 'images/07/*_abc.jpg');,如果您只想缩略图:abc*.jpg btw