perl清理電腦上重複的檔案

來源:互聯網
上載者:User

苦於電腦上的東西太多(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'
]
},
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.