批量复制文件-matlab实现

来源:互联网 发布:人像摄影师 知乎 编辑:程序博客网 时间:2024/05/16 15:13

我们的需求是:从文件系统中复制一堆文件到另一个地方,这堆文件的文件名写在.csv文件里面。虽然各种操作系统(Linux,Mac)都提供了一堆的批量复制文件的指令。但是对我们的需求,还是无能为力。因此,我们就简单地用matlab来实现一下。

函数定义

这个函数有四个参数:

function flag = csvcp(src_file_dir,dst_file_dir,csv_filename,jump_first_line)
src_file_dir 待移动文件夹的路径dst_file_dir 目标文件夹路径csv_filename csv文件的完整路径jump_first_line boolean型,默认为true,表示是否跳过CSV文件第一行的内容,默认跳过。

参数处理

作为一头有着强烈处女座情节的牛,参数处理肯定得写好。直接上代码吧。

if nargin<2||nargin>4        disp('Argument Count incorrect! ');        flag=false;        return;    end    if nargin==2        disp('Using default csv file name filelist.csv ');        disp('Jumping first line in the csv file');        csv_filename='filelist.csv';        jump_first_line=true;    end    if exist(dst_file_dir,'dir')~=7        disp(['Destinate file folder ',dst_file_dir,' not exist,CREATING']);        mkdir(dst_file_dir);    end     if exist(csv_filename,'file')==0        csv_filename=[src_file_dir,'/../',csv_filename];        if exist(csv_filename,'file')==0            disp('Csv file not exist');            flag=false;            return;        else            disp('Using csv file near the source image folder!');        end     end

读取csv文件

fid=fopen(csv_filename,'r');    [filelist]=textscan(fid,'%s%*[^\n]');    filelist=filelist{1,1};    if jump_first_line==true        startindex=2;    else        startindex=1;    end

批量移动文件

if numel(filelist)>0        for i=startindex:numel(filelist)            copyfile([src_file_dir,'/',filelist{i}],[dst_file_dir,'/',filelist{i}]);            disp(['copying file: ',filelist{i}]);        end        flag=true;    else        disp('csv file content error! ');        flag=false;        return;    end    disp('Done!');

完整代码

最近学着使用github托管代码。以上的代码托管在:
https://github.com/ColdZoo/csvcp
你都看到这里了,给个星星吧~

测试与使用

使用起来很简单,需要准备的东东是。

  1. csv文件,保存你要复制的文件名称。
  2. csvcp的代码,从github上clone下来最新版的即可
  3. 你要复制的文件夹。

    复制的命令是(matlab下):
    csvcp(‘src_dir’,’dst_dir’,’filelist.csv’,true);

其中第三第四个参数可以省略。目标文件夹不存在的话会自动生成。当然源文件夹是必须得存在的(否则你复制什么)。

关于csv文件的生成

csv文件是一个你需要复制文件的列表。
应该类似于下面这种形式:

Copy File List1.jpg2.jpg3.mkv4.jpg

这种CSV文件只有一列,第一行是列名,应该被省略(第四个参数)。
在Mac和Linux下可以简单地用SHELL脚本自动生成。

例如,你要复制的文件都在文件夹img里面。
那么做完下列这些命令,filelist.csv文件会自动生成

White-Knight:Desktop zhengcai$ cd imgWhite-Knight:img zhengcai$ lsSinaWeibo.png                  map-bg.jpg                     qq@2x.pngTencentWeibo.png               mockedup-news.png              ribbon-apple.pngexamples                       mooning.png                    trash.pngfacebook.png                   neg.png                        twitter.pngfilelist.csv                   neutral.png                    wechat.pngglyphicons-halflings-white.png path.png                       white_wall_hash.pngglyphicons-halflings.png       pos.pnginstagram.png                  qq.pngWhite-Knight:img zhengcai$ ls >> ../filelist.csv
0 0
原创粉丝点击