0

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

我应该如何处理这种情况?我应该去目录然后在目录中搜索现有代码然后执行交换吗?

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

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

谢谢

4

2 回答 2

1

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

将File::Find::Rule视为一种在目录树中查找和处理大量文件的简单方法。您可以设置规则,仅包含符合您的特定要求的文件,同时绕过所有其他文件。您还可以为那些符合您的规则的文件设置处理程序。

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

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

一旦您发布了一些显示您遇到问题的代码以及有关代码的具体问题,我们实际上可以提供更具体的帮助。如您所问,您的问题过于宽泛,无法得到具体答案。

更新: 昨晚我做了一些工作来查看 File::Find。它遍历了我的 Windows 计算机上数千个目录中的大约 100,000 个文件,并且花费了大约两分钟。 sub wanted只是做了一个简单的文件和目录计数,所以我几乎可以只测试 File::Find 的效率。在第一个回调想要脚本输出一个“开始”。我这样做的原因是因为从历史上看,我发现 File::Find 在具有大型文件系统的 Windows 上实际启动它的回调循环需要很长时间。

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

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

然而,作为比较,在我的 Windows 系统上运行类似复杂目录树的 File::Find 测试脚本在“首次运行”时遍历 100,000 个文件的时间大约是我的 Linux 系统上的十倍。随后的运行差异更加显着,因为 Linux 可能正在执行一些文件系统缓存。

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

于 2011-06-29T17:46:06.610 回答
0
 #!/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";} 
}
于 2011-07-18T06:31:47.400 回答