[Perl]全盘查找重复的目录
- 523066680
- Administrator
- 帖子: 573
- 注册时间: 2016年07月19日 12:14
- 联系:
将目录树结构转为 Perl 哈希(键值对)结构
思路,将文件夹目录结构转为哈希结构,借用 Perl 的 dump 函数直接输出某一节点下的所有"子节点"信息。
然后将 Dump 出来的信息转为 MD5 校验值,这样无需做大量的存储也能进行对比。
输出示例(部分):
然后将 Dump 出来的信息转为 MD5 校验值,这样无需做大量的存储也能进行对比。
d69c12204cb2ec0313843e44c3990420 C:\MinGW c538d379fc40d593e988477c1cc325d5 C:\NVIDIA b1705da1f745931c29e722d5418bb104 C:\Perl 3b17d11edd2df48e306076c13c04ba91 C:\Perl\html\lib\YAML f1f6a1e9ec6ea63004fd66233b15b778 C:\Perl\html\lib\ActivePerl\DocTools
Code: [show] | [select all]
缺点是用了大量空格作为缩进,处理庞大的目录树时内存暴涨。getting file lists ... Deal ... { "accumulators.hpp" => {}, "accumulators_fwd.hpp" => {}, "framework" => { "accumulator_base.hpp" => {}, "accumulator_concept.hpp" => {}, "accumulator_set.hpp" => {}, "accumulators" => { "droppable_accumulator.hpp" => {}, "external_accumulator.hpp" => {},
- 523066680
- Administrator
- 帖子: 573
- 注册时间: 2016年07月19日 12:14
- 联系:
Perl 遍历磁盘文件并筛选出内容相同的目录
备注:
- 使用过程将在 D 盘生成 dirs.txt 和 md5map.txt,dirs.txt 为dir输出结果(Unicode),
md5map为所有目录的校验值 - 使用cmd /U /c 执行 dir 命令以确保Unicode字符的完整输出
- 使用 YAML::Tiny Dump 替代 Data::Dump,减少结构体输出的体积
- 内存占用情况:如果 dir 导出的文件大小为 100MB,则内存占用约为 250MB
- 冗余信息的处理:
假设某个目录存在副本,且子目录下也存在副本程序将只显示 fold 这一层的结果。但是,如果在副本的中间某一层存在差异,则会详尽地列出相同的子目录代码: 全选
├─Fold │ ├─a │ └─a - 副本 └─Fold - 副本 ├─a └─a - 副本
- 效率:个人PC(双核4G旧主机蓝标硬盘),dir /a /s /b D: ,254506 行数据, 从 dir 到 Perl 输出判断结果
耗时 58 秒
Code: [show] | [select all]
在线用户
正浏览此版面之用户: 没有注册用户 和 8 访客