• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

perl清理电脑上重复的文件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

苦于电脑上的东西太多(300多G的空间,还有移动硬盘,电脑和硬盘上的东西很多重复了),一直想清理一下,这种活技术含量不高,体力系数却高得惊人,肯定不能人去干了,得想编程。

用.net吧,不够我折腾的,有点小题大作了。

以前用Perl搜索文件的程序,很快很好很简洁,就选他了,不过不小心还是走了点弯路。

 

开始的构思,就先把所有的遍历出来,再对这个东西进行挨个比对:

先遍历:

$dw->onFile(
sub {
        my ($file) =@_;
        push@files,
        {
            "Name"=>basename($file),
            "Dir"=>dirname($file),
            "FullName"=>$file
        };
        return File::DirWalk::SUCCESS;
    }
);
$dw->walk('D:/old/perl');

 

再在尝试循环比对一下,如果只有两个重复文件的话,好说一点,但如果出现多个重复文件,就可能要用标记或者多次推出列表了,想着更麻烦了。

my$cmp_sub=sub
{
$_[0]{"Name"} cmp $_[1]{"Name"}
};
#先排序
my@Newfiles=sort {$cmp_sub->($a,$b)} @files;

while(@Newfiles)
{
    print $#Newfiles."\n";
    my$item=pop@Newfiles;

    my$idx= custom_list_search($cmp_sub,$item,\@Newfiles);
    if($idx!=-1)
    {    
        print$item->{"FullName"}."\n";
        print$Newfiles[$idx]{"FullName"}."\n";
    }
    print"\n";
}

 

更麻烦了,总是有种感觉这个问题用perl的数据结构应该是很好解决的,我肯定走岔了。灵光一闪,用HASH不是一个就搞定了吗,用FileNAME作Key,用一个路径数组用VALUE,不就行了吗:)如下:

 
my%files;

$dw->onFile(
sub {
    my ($file) =@_;
    push @{$files{basename($file)}->{"Paths"}},$file;
#Paths这里是一个路径数组,看见路径就往里塞,自动塞到同一个文件名下的路径列表中去.
    return File::DirWalk::SUCCESS;
    }
);

my$hTrace;
open$hTrace,'> Trace.txt';
select$hTrace;

$dw->walk('D:/old/perl');

print Dumper(\%files);
close$hTrace;

 

OK, 搞定,所有的活就在那一句push,全搞定。

最终出来的HASH数据体如下:一个文件在哪里出现多次一止了然,剩下的工作就很好说了:)

说PERL是巫师,真没说错!!!

$VAR1= {
'getElementChain.pl'=> {
'Paths'=> [
'D:\\old\\perl\\getDataElefromASN.1\\Copy (3) of getElementChain.pl'
]
}
,
'rand.pl'=> {
'Paths'=> [
'D:\\old\\perl\\advancedperl\\Closure\\rand.pl'
]
}
,
'Get All ATS Core Faults.pl'=> {
'Paths'=> [
'D:\\old\\perl\\Coding eReview add Functionbanner\\Coding eReview add Functionbanner\\Get All ATS Core Faults.pl',
'D:\\old\\perl\\Get All ATS Core Faults.pl'
]
}
,

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Perl第三章操作符发布时间:2022-07-22
下一篇:
/u01/app/11.2.0.4/grid/perl/bin/perl-I/u01/app/11.2.0.4/grid/perl/lib-I/u01/app/ ...发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap