我有一个主文件夹。此主文件夹中有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
答案 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
)。