如何在Matlab中筛选≥1GB的重复文件并写入Excel?
修改MATLAB脚本:仅导出≥1GB的重复文件到Excel
原脚本可检测指定目录下所有重复文件,现在调整为只处理大小≥1GB的文件,并将这类重复文件的信息导出到Excel,同时优化了原脚本的低效逻辑和拼写错误。
修改后的完整代码
root = 'C:\Users\19108\Documents'; % 获取目录下所有文件(含子目录),排除文件夹 dirlist = dir(fullfile(root, '**\*.*')); filelist = dirlist(~[dirlist.isdir]); % 定义1GB的字节数(按二进制计算:1024^3),若需十进制1GB可改为1e9 oneGB = 1024^3; % 筛选出大小≥1GB的文件 large_files = filelist([filelist.bytes] >= oneGB); if isempty(large_files) disp('没有找到大小≥1GB的文件'); return; end % 提取文件名用于检测重复 names = {large_files.name}; % 获取唯一文件名、分组索引及重复次数 [unique_names, ~, idx] = unique(names, 'stable'); dup_mask = histcounts(idx) >= 2; dup_names = unique_names(dup_mask); % 收集所有重复的大文件信息 dup_file_list = []; for name = dup_names file_indices = find(strcmp(names, name{1})); dup_file_list = [dup_file_list; large_files(file_indices)]; end % 转换为表格并添加分组标识 dup_table = struct2table(dup_file_list); [~, group_id] = findgroups(dup_table.name); dup_table.GroupID = group_id; % 写入Excel文件,可替换为自定义文件名 output_file = '大文件重复检测结果.xlsx'; writetable(dup_table, output_file); disp(['结果已写入:', output_file]);
关键修改说明
- 大小筛选:新增
oneGB变量定义,直接过滤出字节数达标文件,减少无效计算 - 效率优化:用
unique+histcounts替代原脚本的双重循环,文件数量多时性能提升显著 - 错误修复:修正原脚本中
name(i)的拼写错误(应为names(i)) - 分组标识:新增
GroupID列,同一组重复文件会有相同ID,方便Excel中查看关联项 - 空值处理:如果没有符合条件的大文件,直接提示并退出,避免后续报错
内容的提问来源于stack exchange,提问作者Rookie_Programmer
相关产品推荐
相关产品推荐

