基于将工作文件在家里电脑和公司电脑上的转移、Kindle 上电子书的管理的需求,我用 Matlab 写了几个函数,用来实现这些需求。
1、主要有两个函数:
1、syncfolder 用来同步文件夹。syncfolder(p1, p2, direction)可将文件夹 p1 和 p2 进行同步, direction 控制同步的方向。比如 direction 为 0 时为双向同步, direction 为 1 时将 p1 中的新文件同步到 p2 , direction 为 2 时将 p1 中的新文件同步到 p2 ,并且将 p2 中多余的文件删除; direction 为-1 或-2 时含义类似,不过方向相反而已。
2、backupfolder 用来备份文件夹。backupfolder(p1, p2)将文件夹 p1 备份到 p2 目录。每次备份时,将在 p2 下建立一个以当天日期命名的文件夹,并且将 p1 目录下在上次备份后更新或新增文件都备份到该新建的文件夹中。
为配合 backupfolder 的使用,另外还有两个功能函数,其一为 getbackups。getbackups(fileName, backupPath)可以返回备份目录 backupPath 下所有 fileName 的历史版本,其中 fileName 为相对于备份根目录的相对路劲,也可以文件夹名字。
另一个功能函数为revertbackup ,用来恢复历史文件。使用方法为 revertbackup(revertPath, backupPath, savePath, begDate),其中 revertPath 为所需要恢复的文件或文件夹(用在备份目录 backupPath 下的相对路径表示)。revertPath 上所有文件的在 begDate 之后的最新版本都被保存到 savePath 目录下。
2、同步 Matlab 工作文件
每天下班后都需要将文件 copy 到 U 盘带回家去做,我的工作文件位于'D:\My Documents\MATLAB\',需要将这些文件复制到 U 盘更目录下的 Matlab 目录下。这时候只需要运行
for i = 1:10
Matlabpath= [char(i+'D'), ':\Matlab\'];
if isdir(Matlabpath), break; end
end
syncfolder('D:\My Documents\MATLAB\', Matlabpath);
3、同步 Kindle 的电子书
我已经收集了上百本几百 M 的电子书,这些电子书被归类整理到电脑分类文件夹中。在之前,我只能选择将所有电子书复制粘贴到 Kindle 中,尽管可能只新增几本书,也需要将所有书都传输一遍。而用上面的函数,只需要运行下面代码,每次自动只传输新增加的书
for i = 1:10
kindlepath = [char(i+'D'), ':\DK_Documents\'];
if isdir(kindlepath), break; end
end
syncfolder('D:\My Documents\ebooks\', kindlepath, 1);
4、备份工作文档
比如我将所有 Matlab 代码都保存在 D:\My Documents\MATLAB\。但我担心不小心误删自己的代码,所以我将下面这行代码放在 startup.m 里面, Matlab 每次打开时会自动帮我备份
backupfolder('D:\My Documents\MATLAB\', 'D:\backup\Matlab');
如果我误删了文件夹'D:\My Documents\MATLAB\tools\',这时候我只需要运行
revertbackup('tools', 'D:\backup\Matlab', 'D:\My Documents\MATLAB\tools\')
便会恢复 tools 目录下的所有备份过的文件。也可以通过 getbackups 查看某文件比如 startup.m 在历史上所有版本(相当于 wikipedia 的历史版本的概念)
a = getbackups('startup.m', 'D:\backup\Matlab')
然后通过 visdiff(a{1}, a{2})可以查看历史版本的差异。
Q. E. D.