您的位置 首页 > 数码极客

〈如何比较两个文件夹〉如何比较两个文件夹的不同

题目:比较2个文件夹, 判断并列出2个文件夹中重复的文件, 以及只存在某个文件夹的文件。

思路:我们需要判断是否重复, 因此选用hash来作为存储的数据结构比较合适。


我们先定义需要的变量:

my $folder1 = 'test'; my $folder2 = 'test2'; my %hash_same; my %hash_1; my %hash_2;

先读取其中一个文件夹, 创建目录句柄

opendir my $fd1, $folder1 or die "failed to open folder1\n";

依次读取文件夹中的文件, 存入hash中

while(my $file = readdir $fd1){

使用正则表达式过滤掉.开头的文件

next if $file =~ /^\./; $hash_1{$file} = 1; }

最后关闭文件句柄

closedir $fd1;

对于另一个文件夹, 使用同样的操作

opendir my $fd2, $folder2 or die "failed to open folder2\n"; while(my $file = readdir $fd2){ next if $file =~ /^\./; $hash_2{$file} = 1; } closedir $fd2;

循环遍历第一个文件夹中的文件, 针对每个文件, 判断其是否在第二个文件夹中, 如果存在, 则表示该文件同时存在于2个文件夹中, 则将其存入另一个预定义的hash中, 同时将其从2个文件夹各自的hash中删除。

这里需要指出的是, 删除hash中的元素, 不能简单的使用undef或者置成空值, 需要使用delete来删除特定的元素。

for my $file(keys %hash_1){ if($hash_2{$file}){ $hash_same{$file} = 1; delete $hash_1{$file}; delete $hash_2{$file}; } }

这样, 当我们遍历完第一个文件夹中的所有文件时, 第一个hash中剩下的元素,就是只存在于文件夹1中的文件, hash2中剩下的元素就是只存在于文件夹2中的文件。

最后我们依次打印出各个hash, 来显示我们的结果

print "in both folders: \n"; print keys %hash_same; print "\n"; print "only in folder1: \n"; print keys %hash_1; print "\n"; print "only in folder2: \n"; print keys %hash_2; print "\n";

这个方法其实还可以优化一下:

我们对于文件夹2中的文件, 不需要先读取所有的文件存入hash, 我们只需要依次遍历该文件夹中的文件, 然后直接去判断其是否存在于hash1中, 然后只需要存储不存在于hash1中的文件。这样我们只需要循环2次即可。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何比较两个文件夹,如何比较两个文件夹的不同,如何比较两个文件夹内容的异同,如何比较两个文件夹里文件的不同,如何比较两个文件夹是否一样”边界阅读