如何将多个文件夹重命名为文本文件中的新名称

时间:2015-01-07 10:53:13

标签: perl

我有一个主文件夹。此主文件夹中有120个子文件夹。

他们的名字如下:

12sg
45gh
46ght
49hk5
.
.
.
zadg54

我在mol.txt文件中为每个子文件夹命名。 mol.txt中有120个名字

mol.txt文件:

methyl
ethyl-2
nitro1
pernyty
.
.
.
dpcopt3

我想使用perl将所有子文件夹重命名为mol.txt文件中的新名称,但我不知道如何操作(目录列表按字母顺序排列。我想根据此顺序重命名它们)。你能救我吗?

例如:

"methyl" name is for 12sg folder
"ethyl-2" name is for 45gh folder

1 个答案:

答案 0 :(得分:2)

您的第一步是将“旧”名称“映射”为“新”名称。

您如何知道12sh应该重命名为methyl?那不在你的mol.txt中。

无论如何,第一步是用关系构造一个哈希。如果您确定目录中的订单与mol.txt匹配。 (并且要小心这个,有几个可能的目录顺序,所以这不是一个安全的假设)你可能会:

open ( my $input, "<", "mol.txt" );   
opendir ( my $dir_handle, "/your_directory" ); 

#sort because otherwise it's 'filesystem ordered' which may not be alphabetical. 
my @list_of_stuff = sort ( readdir ( $dir_handle ) ); 

foreach my $dirname ( @list_of_stuff )  {
    my $rename_to = <$input>;
    chomp ( $rename_to );

    print "Rename $dirname to $rename_to\n"; 
}

如果它看起来产生了正确的输出,那么你将添加perl rename。但请注意 - 此处的目录列表中不会发生排序,因此排序可能不是您所期望的。 (因此上面的代码段不包含rename)。