Linux shell指令碼區別內容相同的檔案

2021-04-21 09:37:11 字數 1120 閱讀 2289

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

for file in *        #遍歷檔案

doif ! [ -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/

fifi

done

mv $file ../unique/

fidone

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

為了提高效率,後來考慮只對檔案大小相同的檔案才進行比較.指令碼如下:

for file in *        #遍歷檔案

doif ! [ -f "$file" ] #如果檔案存在的話,因為有的檔案可能被剔除了.

then

echo $file" not exist"

else

leno=`ls -l $file | awk ''`    #使用ls和awk提出檔案大小

for i in *

doleni=`ls -l $i | awk ''`

if  [ "$file" != "$i" -a "$leno" = "$leni" ]    #如果檔名不同,並且檔案大小相同

then

if  cmp -s $file $i

then

mv $i ../same/

fifi

done

mv $file ../unique/

fidone

找了一小部分檔案測試了一下,速度竟比第乙個還慢,可能是頻繁呼叫ls和awk的問題.

先到此,如果有更好的辦法,再作補充.

源自:賀計文

(個人**

Linux shell指令碼區別內容相同的檔案

以前使用 網路蜘蛛 抓取了不少檔案.但後來發現這些檔案中有很多是內容完全相同的,如何只保留乙份內容相同的檔案而把其它相同的去除掉哪?我使用了linux shell指令碼處理這個問題 for file in 遍歷檔案 doif f file 如果檔案存在的話,因為有的檔案可能被剔除了.then ech...

Makefile與shell指令碼區別

在makefile可以呼叫shell指令碼,但是makefile和shell指令碼是不同的。本文試著歸納一下makefile和shell指令碼的不同。1 shell中所有引用以 打頭的變數其後要加 而在makefile中的變數是以 打頭的後加 例項如下 makefile path data subp...

紅樓版本 區別

紅樓夢 在流傳過程中逐步形成了眾多版本,大致可分為兩個系統 庚辰本是目前所見存脂批最多的抄本,這些批語有著重要的美學和史料價值。這個本子可能是作者生前最後一次改定的本子,也最接近作者手稿。所以,庚辰本在 紅樓夢 一書的流行及研究過程中扮演了乙個重要的角色,自有它的特殊地位。該原本八十回,中缺六十 四...