关闭

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

853人阅读 评论(0) 收藏 举报
以前使用'网络蜘蛛'抓取了不少文件.但后来发现这些文件中有很多是内容完全相同的,如何只保留一份内容相同的文件而把其它相同的去除掉哪?我使用了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的问题.
先到此,如果有更好的办法,再作补充.
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31427次
    • 积分:581
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:4篇
    • 译文:1篇
    • 评论:31条
    文章分类
    最新评论