Linux shell脚本区别内容相同的文件.

王朝system·作者佚名  2007-01-18
窄屏简体版  字體: |||超大  

以前使用'网络蜘蛛'抓取了不少文件.但后来发现这些文件中有很多是内容完全相同的,如何只保留一份内容相同的文件而把其它相同的去除掉哪?我使用了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的问题.

先到此,如果有更好的办法,再作补充.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航