找出目录中相同的文件

这个功能,笔者是使用python实现。执行脚本后,根据提示手动输入目录的路径。脚本计算该目录及其子目录中所包含文件的md5值,比对md5值,从而打印出md5值相同的文件路径。

python完整脚本如下:

# -*- coding: utf-8 -*-
def calmd5(filename):
        import hashlib
        f = open(filename,‘rb‘)
        m = hashlib.md5()
        m.update(f.read())
        hash = m.hexdigest()
        return hash
def uniq_line():
        import re
        f = open(r‘H:\my_python_py.log‘)
        count_dict = {}
        repeat_line = []
        for line in f.readlines():
                line = line.strip()
                line = list(line)
                remd5 = ‘‘.join(line[-32:])
                count = count_dict.setdefault(remd5,0)
                count += 1
                count_dict[remd5] = count
                if count_dict[remd5] > 1:
                        print ‘‘.join(line)
                        repeat_line.append(remd5)
        print ‘    ‘
        print ‘###the repeat lines before uniqed is:\n‘,repeat_line
        for n in repeat_line:
                while repeat_line.count(n) > 1:
                        repeat_line.remove(n)
        print ‘    ‘
        print ‘###after processed is:\n‘,repeat_line
        print ‘\n\n\n‘
        print ‘------------Equal files are listed below---------------‘
        f.close()
        p = open(r‘H:\my_python_py.log‘)
        all_file = p.readlines()
        for n in repeat_line:
                print ‘---MD5: ‘,n
                for lines in all_file:
                        m = re.search(n,lines)
                        if m:print lines[0:-33]
        f.close()
def filepath(dir):
        import os
        f = open(r‘H:\my_python_py.log‘,‘a‘)
        for i in os.walk(dir):
                dir = i[0]
                name = i[2]
                if name != []:
                        for files in name:
                                files = ‘‘.join(files)
                                fullpath = os.path.join(dir,files)
                                remd5 = calmd5(fullpath)
                                print fullpath+‘                ‘+remd5
                                f.write(fullpath)
                                f.write(‘                    ‘)
                                f.write(remd5)
                                f.write(‘\n‘)
def main():
        import os
        Dir = raw_input("Please input the Dir(etc:G:\\shareux\\tmp):")
        filepath(Dir)
        uniq_line()
        os.remove(r‘H:\my_python_py.log‘)
        print ‘Successfully Exited‘

if __name__ == ‘__main__‘:main()

执行效果截图如下:

找出目录中相同的文件

时间: 2024-10-09 17:50:26

找出目录中相同的文件的相关文章

在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world

一.题目 编写一个内核模块,在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world.内核版本要求2.6.18 ? 二.实验环境 物理主机:win7 64bit, i5双核,8G内存 虚拟机:Vmware Workstation 10.0.2 虚拟主机: CentOs-5.11,内核2.6.18 ? 三.实验思路 在着手解决问题之前,我在网上查阅了一些资料,大多是关于模块的介绍.linux内核采用的是模块化编程,这样可以很容易的添加或

通过代码审计找出网站中的XSS漏洞实战(三)

一.背景 笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘.工具挖掘.代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016095198 本文主要记录通过代码审计的方式进行XSS漏洞挖掘,分为了找出关键位置,正向审计,反向审计三个部分,审计的系统为permeate渗透测试系统,测试系统的搭建可以参考笔者的

/proc 目录中的主要文件的说明

/proc 目录中的主要文件的说明 文件或目录名称 描 述 apm 高级电源管理信息 cmdline 文件给出了内核启动的命令行 CPUinfo 中央处理器信息 devices 可以用到的设备(块设备/字符设备) dma 显示当前使用的 DMA 通道 filesystems 核心配置的文件系统 ioports 当前使用的 I/O 端口 interrupts 文件的每一行都有一个保留的中断 kcore 系统物理内存映像 kmsg 核心输出的消息,被送到日志文件 mdstat 文件包含了由 md 设

当cpu飙升时,找出php中可能有问题的代码行

当你发现一个平时占用cpu比较少的进程突然间占用cpu接近100%时,你如何找到导致cpu飙升的原因?我的思路是,首先找到进程正在执行的代码行,从而确定可能有问题的代码段.然后,再仔细分析有问题的代码段,从而找出原因. 如果你的程序使用的是c.c++编写,那么你可以很容易的找到正在执行的代码行.但是,程序是php编写的,如何找到可能有问题的代码行呢?这个问题就是本文要解决的问题. 背景知识: 如果你对c语言不熟悉的话,可以略过,直接看 示例演示. 大家都知道php是一个解释性语言.用户编写的ph

找出矩阵中含有0最多的一行(find the longest row of zero)

对于一个n*n的矩阵,其中只包含有0,1两种元素且,所有的0都在1之前,请找出矩阵中0最多的一行.(Given an N-by-N matrix of 0s and 1s such that in each row no 0 comes before a 1, find the row with the most 0s in O(N) time.) 初看这题,想到的算法就是每一行都设置一个计数器,记录每行的0的个数,然后找出最大值即可(暴力解法). 算法实现: int* find_the_lon

经典算法学习——快速找出数组中两个数字,相加等于某特定值

这个算法题的描述如下:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值.目前我假设数组中的都是各不相等的整数.这道题是我在一次面试中被问到的,由于各种原因,我没回答上来,十分尴尬.其实这道题十分简单,我们使用相对巧妙的方法来实现下.注意不使用两层循环的元素遍历.示例代码上传至:https://github.com/chenyufeng1991/SumTo100 . 算法描述如下: (0)首先对原数组进行排序,成为递增数组: (1)对排序后的数组头部i [0]和数组尾部j [n-1]

c语言代码编程题汇总:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值

找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 程序代码如下: 1 /* 2 2017年3月8日08:39:16 3 功能:找出字符串中与输入的字母元素相同的个数以及其所对应数组的下标值 4 */ 5 6 #include"stdio.h" 7 int main (void) 8 { 9 int i = 0, j = 0; 10 char a[100]; 11 char ch; 12 int num = 0; 13 14 printf ("please inp

4.6 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。

5 / 2 6 / \ 1 4 7 / 3 class Node{ Node left; Node right; Node parent; int val; } /** 1.如果有右子树,则结果为右子树的最左节点. 2.如果没有右子树,则需要回到父节点,如果当前节点是父节点的左子树,则父节点就是结果,如果不是继续向上再找父节点. */ public TreeNode inorderSucc(TreeNode n){ if(n==null) return null; if(n.right!=nul

找出字符串中出现次数最多的字符,和最大次数

/*找出字符串中出现次数最多的字符,和最大次数*/ function countMax(str){ var max = 0; // 记录出现的最大次数 var maxChar = ""; // 记录出现最多次数的字符 var counts = new Array(127); // 记录中间计算结果 for(var i = 0; i < counts.length; i++){ counts[i] = 0; } for(var i = 0; i < str.length; i