使用perl中的哈希表重命名文件



我制作了一个perl代码,如下所示。在这里,我要做的是首先从一个文本文件中获取输入,该文件由一个带标题的HTTPURL组成。因此,第一个正则表达式是标题,第二个正则表达式从URL内部获取id。所有这些值都插入到哈希表%myfilenames()中。

所以这个哈希表的关键字作为URL id,值作为标题。在这里之前一切都很好,现在我的电脑上有一组文件,它们的名字中有我们从URL中提取的ID。

我想做的是,如果ID在哈希表中,那么文件名应该更改为分配给ID的值。现在,最后一个函数中print语句的输出是正确的,但我无法重命名文件。我尝试了很多方法,但都无效。有人能帮忙吗。

示例:

URL: https://abc.com/789012 <--- ID
Value (new Title) : ABC
file name on computer = file-789012 <---- ID
new file name = ABC

我的代码:

use File::Slurp;
use File::Copy qw(move);
open( F, '<hadoop.txt' );
$key   = '';
$value = '';
%myfilenames = ();
foreach (<F>) {
    if ( $_ =~ /Lecture/ ) {
        $value = $_;
    }
    if ( $_ =~ /https/ ) {
        if ( $_ =~ /d{6}/ ) {
            $key = $&;
        }
    }
    if ( !( $value eq '' || $key eq '' ) ) {
        #print "$keytt$value";
        $myfilenames{$key} = $value;
        $key               = '';
        $value             = '';
    }
}
#while ( my ( $k, $v ) = each %myfilenames ) { print "$k $vn"; }
my @files = read_dir 'C:\inputfolder';
for (@files) {
    if ( $_ =~ /d{6}/ ) {
        $oldval = $&;
    }
    $newval = $myfilenames{$oldval};
    chomp($newval);
    print $_ , "tt$newval" . "n";
    $key = '';
}

您可能没有预先设置文件名的路径。以下适用于我(在Linux上):

#!/usr/bin/perl
use warnings;
use strict;
use File::Slurp qw{ read_dir };
my $dir = 0;
mkdir $dir;
open my $FH, '>', "$dir/$_" for 123456, 234567;
my $key = my $value = q();
my %myfilenames = ();
for (<DATA>) {
    chomp;
    $value = $_ if /Lecture/;
    $key   = $1 if /https/ and /(d{6})/;
    if ($value ne q() and $key ne q()) {
        $myfilenames{$key} = $value;
        $key = $value = q();
    }
}
my @files = read_dir($dir);
for (@files) {
    if (/(d{6})/) {
        my $oldval = $1;
        my $newval = $myfilenames{$oldval};
        rename "$dir/$oldval", "$dir/$newval";
    }
}
__DATA__
Lecture A1
https://123456
# Comment
Lecture A2
https://234567

相关内容

  • 没有找到相关文章