本帖最后由 matlab的旋律 于 2018-8-22 03:11 编辑  
 
本打算将Mac笔记本里面的照片拷贝到移动硬盘备份,不小心点击了复制,非常悲剧的是相册里面的图片多了一倍。打算在网上找一个软件对复制的照片进行删重,连续下载好几个软件,要么是收费,要么是无法正常工作,Mac某些功能对习惯免费的国人来说还是比较非常不友好的。就自己写个脚本搞定吧~~~首先,新建一个.m文件,保存为main 
 
 
clear close all clc  
FilePath = 'lxy'; FileCell = struct2cell(dir([FilePath,'/*.jpg']));%获取指定目录下所有后缀相同的文件名 num_column = size(FileCell,2);  
rawDataMatrix = {}; fileMatrix = {}; k = 0; for file_count = 1:num_column     FileName = FileCell{1,file_count};%获取顺序文件名     Data = imread([FilePath,'/', FileName]);%加载数据     isIn = judgePhotoUnique(rawDataMatrix,Data);     if ~isIn%当当前图片不在筛选文件夹时         k = k +1;         rawDataMatrix{k} = Data;         fileMatrix{k} = FileName;     end end  
uniqueDataFileName = 'UniqueFile';%筛选文件夹 mkdir(uniqueDataFileName); MoveFileToNewPath(FilePath,uniqueDataFileName,fileMatrix);%调用保存筛选文件子函数  
 
%下面的字函数判断图片在筛选文件中是否存在 function isIn = judgePhotoUnique(rawDataMatrix,Data)  
isIn = 0;  
for k = 1:length(rawDataMatrix)     try         if all(rawDataMatrix{k} == Data)%由于图片的维度不一定一致,需要用try进行尝试判断。当然这里也可以添加相似度或者其他功能的判断             isIn = 1;             break;         end     catch         continue;     end end  
%下面的子函数对筛选出来的图片进行剪切和保存到新文件夹中 
function MoveFileToNewPath(old_path,new_path,fileMatrix) 
 
for k = 1 : length(fileMatrix)         subFile = fullfile(old_path,[fileMatrix{k}]);         movefile(subFile,new_path)%这里为剪切,如果只是拷贝可以使用copyfile end  
 
 |