首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用输入文件选项时更改来自WGET的输出文件名

问使用输入文件选项时更改来自WGET的输出文件名
EN

Stack Overflow用户
提问于 2014-06-26 11:15:21
回答 1查看 776关注 0票数 1

我有一个我编写的perl脚本,它获取一些图像URLs,将这些urls放入一个输入文件中,然后使用--input-file选项运行wget。这很好用..。至少,只要图像文件名是唯一的,它就是唯一的。

我有一家新公司给我发送数据,他们使用了一个非常麻烦的命名方案。所有文件在不同的文件夹中具有相同的名称0.jpg。

例如:

代码语言:javascript
复制
cdn.blah.com/folder/folder/202793000/202793123/0.jpg
cdn.blah.com/folder/folder/198478000/198478725/0.jpg
cdn.blah.com/folder/folder/198594000/198594080/0.jpg

当我用这个运行我的脚本时,wget运行得很好,可以下载所有的图像,但它们的标题是0.jpg.1,0.jpg.2,0.jpg.3等。我不能只计算它们并重新命名它们,因为文件可能会损坏,不可用,等等。

我尝试用-O为每个文件运行一次wget,但速度慢得令人尴尬:启动程序、连接到站点、下载和结束程序。上千次了。这是一个小时和几分钟。

因此,我正在尝试找到一种方法来更改wget的输出文件名,而不会花费太长时间。最初的方法工作得很好,除非必要,否则我不想对其进行太多更改,但我对建议持开放态度。

其他:

对于这个问题,LWP::Simple太简单了。是的,它是有效的,但速度非常慢。它具有与运行单个wget命令相同的问题。每次get()或get_store()调用都会使系统重新连接到服务器。因为文件非常小(平均为60KB),需要处理的文件太多(仅这一个测试文件就有1851个),因此连接时间相当长。

我将使用的文件名可以在/\/(\d+)\/(\d+.jpg)/i中找到,其中文件名将简单地为$1$2以获取2027931230.jpg。对于这个问题来说并不是很重要。

我现在正在使用LWP::ConnCache查看LWP::UserAgent,但它超时和/或在我的pc上挂起。我需要调整超时和重试值。代码的首次运行在挂起前几分钟就下载了693张图片(43mb)。使用simple,我在5分钟内只得到了200张图片。

代码语言:javascript
复制
use LWP::UserAgent;
use LWP::ConnCache;

chomp(@filelist = <INPUTFILE>);
my $browser = LWP::UserAgent->new;
$browser->conn_cache(LWP::ConnCache->new());

foreach(@filelist){
    /\/(\d+)\/(\d+.jpg)/i
    my $newfilename = $1.$2;

    $response = $browser->mirror($_, $folder . $newfilename);
    die 'response failure' if($response->is_error());
}
EN

回答 1

Stack Overflow用户

发布于 2014-06-26 13:10:28

LWP::Simple的getstore函数允许你指定要从中获取数据的URL以及从中存储数据的文件名。对于许多与wget相同的用例,它都是一个很好的模块,但它的优点在于它是一个Perl模块(即不需要外包给外壳或派生子进程)。

代码语言:javascript
复制
use LWP::Simple;
# Grab the filename from the end of the URL    
my $filename = (split '/', $url)[-1];
# If the file exists, increment its name
while (-e $filename)
{
    $filename =~ s{ (\d+)[.]jpg }{ $1+1 . '.jpg' }ex 
        or die "Unexpected filename encountered";
}
getstore($url, $filename);

这个问题并没有具体说明您需要哪种重命名方案,但这对于给出的示例是有效的,只需递增文件名,直到当前目录不包含该文件名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24421804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档