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

原创 2006年05月25日 09:44:00
以前使用'网络蜘蛛'抓取了不少文件.但后来发现这些文件中有很多是内容完全相同的,如何只保留一份内容相同的文件而把其它相同的去除掉哪?我使用了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的问题.
先到此,如果有更好的办法,再作补充.

相关文章推荐

linux shell脚本如何将文本内容按空格分行、如何使用timit原始corpus制作wav的scp文件

在kaldi-trunk提供的例子voxforge中有一个online-demo 直接使用就可以完成样例的在线解码并得到一个不错的结果,但是数据量很小 前段时间试了一下用另一个corpus来做同样...

linux shell脚本中读取文件内容的方法(含效率测试)

主要介绍Shell逐行读取文件的4种方法:while循环法、重定向法、管道法、文件描述符法。 方法1:while循环中执行效率最高,最常用的方法。 代码如下: function ...

linux shell脚本中的``和$()的区别

linux shell脚本中的“和$()的区别,先让我们看一个实例我编写了一个test.sh的脚本文件 注意:shell脚本中用#注释#! /bin/bash echo `echo \$HOSTN...
  • dcjhyn
  • dcjhyn
  • 2017年06月23日 18:40
  • 162

Linux Shell脚本编程--return与exit区别

Linux编程return与exilt区别 exit  是用来结束一个程序的执行的,而return只是用来从一个函数中返回。 return   return 表示从被调函数返回到主调函数继续执行,返回...

linux shell脚本_文件的批量删除_2.0

这次是整合了开发时改正的多个版本,比较1.0有了很大的改善,不仅可以删除备份文件,还可以更新保存备份文件名的文本文件首先是back.recovery的内容 这是个文本文件,内容是所有备份文件的文件路径...

linux shell脚本文件执行分析

原创,转载注明出处 一.shell脚本父子进程分析   代码: #!/bin/bash echo $$ ps -ef |grep `echo $$` echo "---------...
  • hittata
  • hittata
  • 2012年09月25日 15:58
  • 6354

《Linux Shell脚本攻略》 笔记 第三章:文件操作

《Linux Shell脚本攻略》 笔记 第三章:文件操作 1、生产任意大小的文件 [root@localhost dd_test]# [root@localhost dd_test]# dd i...

Linux shell脚本中判断变量文件目录:权限、是否存在、空值、相等

#!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" #这里的-x 参数判断$myPath是否存在并且...

linux shell脚本攻略 学习笔记3 -- 第三章 以文件之名

linux shell脚本攻略 学习笔记3 -- 第三章 以文件之名,本章都是与文件处理相关的知识。...
  • hrl19
  • hrl19
  • 2015年07月09日 21:24
  • 247

Linux Shell脚本编程--(linux空设备文件和重定向)>/dev/null 2>&1

linux空设备文件和重定向 /dev/null代表空文件设备 1表示系统标准输出,系统默认值是1, > /dev/null等同于1 > /dev/null 对于 >dev/null 2>&1 1>...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux shell脚本区别内容相同的文件.
举报原因:
原因补充:

(最多只允许输入30个字)