Linux shell腳本區別內容相同的文件.

以前使用'網絡蜘蛛'抓取了不少文件.但後來發現這些文件中有很多是內容完全相同的,如何只保留一份內容相同的文件而把其它相同的去除掉哪?我使用了linux shell腳本處理這個問題:

for file in *        #遍歷文件
do
    if ! [ -f "$file" ] #如果文件存在的話,因爲有的文件可能被剔除了.
    then
            echo $file" not exist"
    else
            for i in *
            do   
                if  [ "$file" != "$i" ]    #如果文件名不同
                then
                    if  cmp -s $file $i
                    then
                        mv $i ../same/
                    fi
                fi
            done
            mv $file ../unique/
    fi
done

我一共處理4000多個文件,運行的挺慢的,用了1天零2夜才處理完,我汗,竟剔出了近2000,我再汗.

爲了提高效率,後來考慮只對文件大小相同的文件才進行比較.腳本如下:

for file in *        #遍歷文件
do
    if ! [ -f "$file" ] #如果文件存在的話,因爲有的文件可能被剔除了.
    then
            echo $file" not exist"
    else
             leno=`ls -l $file | awk '{print $5}'`    #使用ls和awk提出文件大小
             for i in *
             do
                leni=`ls -l $i | awk '{print $5}'`
                if  [ "$file" != "$i" -a "$leno" = "$leni" ]    #如果文件名不同,並且文件大小相同
                then
                    if  cmp -s $file $i
                    then
                        mv $i ../same/
                    fi
                fi
            done
            mv $file ../unique/
    fi
done

找了一小部分文件測試了一下,速度竟比第一個還慢,可能是頻繁調用ls和awk的問題.
先到此,如果有更好的辦法,再作補充.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章