一直用movefile重命名的总是觉得有点不对,
明明只是按一下F2然后粘贴一个文件名过去,
电脑居然干得比我还慢,
今天终于找到原因了。。。
movefile函数实际上干的是用新文件名复制一遍文件,然后把旧的再删了。。。。
所以用这个做重命名在文件特别多数据量特别大的时候其实是非常非常慢的。。。。
下面是推荐的用法,windows系统中可以用的rename函数(linux里也有对应的函数,用法稍有不同)
下面是一个例子和所需时间,文件夹里面一共64个文件1.95GB
cd C:\Users\lalala\lalala
aa = ls('*.nii');
for n = 1:size(aa,1)
% movefile(aa(n,:),sprintf('%05d.nii',n));
system(['rename',32,aa(n,:),32,sprintf('%02d.nii',n)]);
end
注:
图中的rename是matlab脚本的文件名,第一张图为windows自带rename用时,第二张图是matlab的movefile用时
文件夹里文件和大小都减小一半的时候耗时也都减小一半左右。。
顺便说一下,剪切也是大坑(但可能安全些)(下面说的都是在同一个盘符下操作,剪切文件,不同的盘之间剪切文件较慢,无提升)
用movefile干剪切的事。。。也是先复制过去再把原来的删了,这样做只有一个好处,安全——中途被打断的话源文件还在,
但是遇上稍微大一点的文件效率实在太低。。。
下面是windows下推荐的matlab用法:
system('move /Y oldpath\filename newpath\filename');
/Y是不提示覆盖,/-Y提示覆盖
这个就是windows的剪切了
Matlab高效重命名与剪切技巧
使用Matlab的movefile函数进行重命名时,实际上执行的是复制再删除的过程,这在处理大量大文件时效率极低。推荐在Windows系统中使用rename函数或者system函数结合'move /Y'命令,以显著提高重命名和剪切速度。注意,剪切操作同样需要注意效率问题,使用'(move /Y)'可实现不提示覆盖的快速剪切。
8667

被折叠的 条评论
为什么被折叠?



