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


copy all the files that end with specific name to another directory

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

    original image :
     abc.jpg
    thumbnails :
    100X150_abc.jpg
    80X80_abc.jpg
etc...

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

我所有的图像都有一个唯一的名称,所以我可以用它们的名称来识别缩略图,但缩略图中名称的开头部分是动态的。

比方说,我想从07目录中的06目录复制我的abc.jpg

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

但是我能对缩略图做些什么呢?有类似regex的方法吗?

喜欢!

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

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

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文件函数不支持通配符之类的东西。

以下是应该工作的代码:

<?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文件夹。

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

使用rename('images/06/*abc.jpg', 'images/07/*abc.jpg');,如果您只想要缩略图:rename('images/06/*_abc.jpg', 'images/07/*_abc.jpg'); btw如果您想要所有以abc开头的文件都使用abc*.jpg