[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

求解文件树智能同步批处理程序

已有两个文件树,他们有很多相同文件(夹),但有些不同名或同路径,也有一些对方所没有的文件(夹),要求在最少的时间内使这两个文件夹最大可能的同步。最少的时间主要是指尽可能少的IO操作,最大的同步主要是指文件树结构完全相同,在此基础上保证最大的数据完整和最小的数据冗余,同时尽可能保持符合文件树原有的树结构。

同步原则:
1、判断文件相同的唯一依据就是文件内容或者其相关值(比如其MD5或CRC校验值),文件名、文件路径、创建及修改时间、标签及元属性仅在判断为相同文件后确认如何操作的参考;

2、两个相同文件处于不同的相对位置或不同名均视作不同路径,以修改时间为准,旧文件树做移动改名操作,并在原处留有硬链接;新文件树仅在对应位置做硬链接;一个文件如果对应多个相同文件,则只处理路径上最接近的相同文件;

3、对相同路径(同名同文件夹)的不同文件,以修改时间为准,新文件继续保留原文件名,旧文件增加_old_的前缀,然后互相复制到对方相应路径下;


4、对同时存在同名不同路径与不同名同路径两种情况的文件,不论同步前出现,还是同步时出现,均先按相同文件处理,再按同路径文件处理;

5、分别独有的文件互相复制到对方对应路径下,如果此地其它文件均在同步中移动到另一处,则此文件也响应移动另一处,并在原处留有硬链接,操作后两文件树结构完全一致;


6、其它情况下不做任何处理,比如某个文件树自身存在相同的文件;

7、程序可以只生成同步方案,也就是文件具体操作的批处理程序,以便用户确认是否操作;


8、对复制、移动、改名和创建硬链接操作,可以允许用户介入选择如何复制、移动、改名或创建硬链接,也可以允许用户选择不复制、移动、改名或创建硬链接。

[ 本帖最后由 qzwqzw 于 2010-1-7 16:40 编辑 ]

硬链接是NTFS的一个特性
可以用fsutil hardlink create <新文件名> <现有文件名> 创建
也可以使用其它第三方工具创建
具体内容可以上百度或Google一下

文件内容、MD5或CRC值的获取采取开放自由的原则
不限制使用第三方软件
只要保证效率和稳定即可

建议先生成文件路径、时间和内容相关值的列表
在把列表先按内容或其相关值排序的话,就不需要逐一对比了

是的,对于多个相同文件中路径不是最接近的相同文件是不处理
对于一些复杂冲突的处理,就会考验程序的智能程度
不过你可以设置成由用户选择是否该处理及如何处理

在完成一楼要求的基础上
可以考虑加入对回收站删除文件列表的读取与处理

也就是说如果发现回收站中存在文件树中的文件
则在另一个文件树也对应做删除处理

首先考虑程序模块的完整,足以实现所有的功能
其次考虑是否够健壮,足以应付各种复杂的冲突情况
再次考虑是否够效率,对于K级文件数的处理不会让人难以忍受
最后考虑是否够清晰,不会让自己也被复杂混乱的代码绕进去

[ 本帖最后由 qzwqzw 于 2010-1-8 08:25 编辑 ]

TOP

看来楼上的确有些晕了

这个问题是类似于双向同步的问题
仅仅多了文件改名和移动的判定而已
但正因如此才让大家觉得很复杂

备份和硬链接在这里是一回事
都是为了保证两个文件树的完整
不过有一点你错了
正是为了节约空间和IO操作才使用硬链接
看来你需要补充一下这方面的知识了

相同文件我说过了就是指且仅指文件内容相同
与文件名与路径无关
所以同一目录可能存在相同文件
文件树因为包含子目录所以可能存在同名文件

至于多个相同文件的同步处理
我想我已经说的够清楚了
只按处理路径最接近的那一对
剩下的文件如果成了孤立文件
那就按照普通的同步程序互相复制就可以了

TOP

返回列表