使用perl/java将数据库中现有的图像代码重命名为新的图像代码

使用perl/java将数据库中现有的图像代码重命名为新的图像代码,java,perl,rename,swap,file-rename,Java,Perl,Rename,Swap,File Rename,我试图用一个使用Perl的新代码重命名数据库目录中一组图像的代码。 代码的格式为XXXX\u XXXX\u V1.jpg。我需要做的就是用设计师输入的新代码替换XXXX\u XXXX,图像位于/usr/site/html/images/p 在这种情况下,我的工作方法应该是什么? 我是否应该转到目录,然后在目录中搜索现有代码,然后执行交换 一旦代码被交换,我需要说“成功交换图片”,然后显示http://servername/images/p/n/ct/CODE_V1.jpg查看所有服务器,以便人员

我试图用一个使用Perl的新代码重命名数据库目录中一组图像的代码。 代码的格式为
XXXX\u XXXX\u V1.jpg
。我需要做的就是用设计师输入的新代码替换
XXXX\u XXXX
,图像位于
/usr/site/html/images/p

在这种情况下,我的工作方法应该是什么? 我是否应该转到目录,然后在目录中搜索现有代码,然后执行交换

一旦代码被交换,我需要说“成功交换图片”,然后显示
http://servername/images/p/n/ct/CODE_V1.jpg
查看所有服务器,以便人员可以查看图片以确认操作成功

欢迎任何输入,我正在研究这一点,我将很快粘贴一些代码


谢谢

Perl非常适合这项任务,因为我认为许多其他语言也很适合。然而,如果您已经了解Perl,那么这将是一项非常简单的工作

将其视为查找和处理目录树中大量文件的简单方法。您可以设置只包含符合特定要求的文件的规则,而不包括所有其他文件。您还可以为符合规则的文件设置处理程序

在处理程序中,可以执行您认为必要的重命名

如果文件都在一个目录中,并且不需要有一个确定哪些文件符合条件的条件(或规则)列表,那么您可以只使用opendir和readdir,以及-f等文件检查

一旦你发布了一些代码,显示了你的困境,以及关于代码的具体问题,我们实际上可以提供更具体的帮助。正如被问到的,你的问题太宽泛,无法得到具体的答案

更新:我昨晚在查看File::Find时做了一些工作。它在我的Windows电脑上遍历了大约100000个文件,包含数千个目录,耗时约两分钟
sub-want
只做了一个简单的文件和目录计数,这样我就可以测试file::Find的效率。在第一次回调时,希望脚本输出为“Started”。我这样做的原因是,从历史上看,我发现File::Find在具有大型文件系统的Windows上实际启动回调循环需要很长时间

然后,我在Linux计算机上的一个类似大小的文件结构上运行了相同的脚本

我发现在草莓Perl 5.12.2和$File::Find::1.15版本下,我之前在评论中提到的bug似乎已经被清除。想要的回调几乎是立即开始的,而当我使用5.8.x来处理它时,回调在启动之前需要很长时间。这当然是在windows上。在Linux上,我从来没有遇到过问题

然而,作为比较,在我的Windows系统上,在类似复杂的目录树上工作的File::Find测试脚本在“第一次运行”时遍历100000个文件所花费的时间是在我的Linux系统上的大约十倍。在后续的运行中,差异甚至更为显著,因为Linux可能正在进行一些文件系统缓存


无论如何,我建议如果您确实使用File::Find或File::Find::Rule,请确保您运行的是最新的Perl(5.12.2或5.14.1)以及最新Perl附带的File::Find版本。

我对Perl有点熟悉,只需要温习一下!这些文件在不同的目录中,所以我想我需要在那里输入所有的标准。我会尽快发布一些代码。谢谢所以,温习一下,开始吧。这不是一个“我计划开始这个项目!”的网站,而是一个“我正在做这个项目,需要问一个具体的问题”的网站。嘿,大卫,我是用perl做的,因为我们的图像服务器太大了,在遍历子目录时崩溃了。我对java也做了同样的事情,因为我知道应该进入哪些目录。感谢您的评论和指导!!您的映像服务器是否基于Windows?(只是好奇)我看到了File::Find和File::Find::Rule的问题,这是File::Find的派生版本,当您给它一个相当大的树来遍历时,它需要花费很长时间来构建目录结构,但仅在Windows下。总有一天我会探究它的“为什么”。是的,先生!!它确实是基于windows的,一旦您试图在文件结构的深处找到一个文件,Find似乎什么都不做。但是使用它很好,因为它刷新了Perl:)
 #!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use Data::Dumper;
use List::MoreUtils qw/ uniq /;

my $localdir = 'images/p/';
my @filefound;

find(
sub {push @filefound, $File::Find::name if /.jpg$/ },
$localdir);

foreach (@filefound){
my @split = split('_',@filefound);
my @split1 = $split[0];
foreach (@split1) { print "$_  \n";} 
}