一种将压缩包中与另外一个目录中相同的文件提取出来的方法
2010-05-01 17:09
330 查看
1 概述
这种情况大家都怎么处理呢?我最早是这么做的:
Ø 将我们做了修改的n个文件,从对方的压缩包中解压出来(记得 仍然保持这些文件的源码树结构,而不是将他们解压到同一个目录中)。假设解压到 new_version 目录中,记得将此目录做个备份 new_version_bak;
Ø 用 Beyond Compare (或其他对比软件)将 new_version 与旧软件版本 做对比来合代码;
Ø 合代码后,将 new_version 打包,发给其他开发人员,则对方只需解压该压缩包到源码树的根目录下就ok了,而不需要将这n个文件一个个做替换。如果项目采用cvs的话,也可以讲这个压缩包解压到cvs的根目录下。
这三个步骤中,后两个步骤或许用机器 合软件 大家不放心,但第一个步骤纯粹是重复工作,修改的文件一多,工作量将相当可怕,最好是能交给计算机做。这个工作概括起来就是:
前提:新版本压缩包 new_version.rar、旧版本中与对方提供的原始平台不同的文件以原先源码树的方式统一存放到 old_version 目录下;
需求:将 new_version.rar 中与 old_version 目录下相同的文件提取出来,存放到 new_version 下。
Ø 将 old_version 中的文件以绝对路径的方式列在一张表上,这个工作太适合让perl这种文本处理语言了;
Ø 让 winrar 根据这张表解压对应文件,这也可以采用 winrar x new_version.rar @new_version.lst ;
机器上还必须有安装 perl 程序。
Toolkit
├:make 工具
│ ├libiconv2.dll
│ ├libintl3.dll
│ └make.exe
├:patch 工具
│ ├make.bat
│ ├Makefile
│ └开发工具_patch工具的使用.doc:本文档
└: perl 脚本,下面列出这些perl脚本的功能
├ls_dir.pl:以绝对路径列出指定目录下的文件和目录,类似于linux下的 ls 命令
├mk_dir.pl:新建目录
├replace_str.pl:以正则表达式的方式替换字符
├rm_dir.pl:删除目录
└rm_file.pl:删除文件
Ø make clean :清除patch/build 目录;
Ø make :生成欲修改文件列表以及new_version 目录,它们均位于patch/build 下。
但在执行这两步之前,我们必须先配置 make.bat 和 Makefile 两个文件。
E:/Tech/Document/Tools/Toolkit/Make/make -r -R MAKESHELL=CMD %*
请将 E:/Tech/Document/Tools/Toolkit/Make/make 修改为您PC上make工具存放地址。
2.3.2 Makefile
该文件一般有这么几个地方要改:
PERL_DIR = E:/Tech/Document/Tools/Toolkit/Perl # 蓝色字体修改为上述perl脚本所在目录
RAR_BIN = D:/Program Files/WinRAR/rar.exe # 蓝色字体修改为winrar程序所在目录
PREV_VER_DIR = E:/Tech/Project/ Bak/old_version_bak # 蓝色字体修改为old_version 的绝对路径
RAR_FILE = E:/Tech/Project/new_version.rar # 蓝色字体修改为new_version.rar的绝对路径
STR_DST = new_version # 蓝色字体修改为压缩包里面的第一级目录名
常规的命令行语法描述如下:
WinRAR <命令> -<开关1> -<开关N> <压缩文件 > <文件...> <@列表文件...> <解压路径/>
添加压缩文件命令—a
rar a test.rar 1.txt :添加 1.txt 到压缩包 test.rar中,若无test.rar,则新建它;
添加压缩文件命令—a
rar a test.rar 1.txt :添加 1.txt 到压缩包 test.rar中,若无test.rar,则新建它;
添加压缩注释—c
rar c –z2.txt test.rar :将 2.txt 作为 test.rar的注释;
rar –z2.txt a test.rar 1.txt :上面两步的集合;
解压命令—x
rar x test.rar 1.txt :将1.txt从test中解压出来;
将test.lst文件从test.rar中解压出来—@test.lst
rar x test.rar @test.lst:
关于 winrar 软件的其他方面可参考该软件目录下的 WinRAR.chm,winrar软件的命令和开关不区分大小写。
温陵布衣:
MSN: sikinzen@hotmail.com
Mail: sikinzen @yahoo.com.cn
QQ: 526679213
注:工具包请到我的共享下载:http://sikinzen.download.csdn.net/
1.1 问题的提出
不知道您在开发中碰到过这种情况没:在其他公司提供的平台上做二次开发,但对方每次源码一有更新,都不是以patch包的形式给出,而是将整个工程打包过来,搞得大家每次都得加班来合代码。这种情况大家都怎么处理呢?我最早是这么做的:
Ø 将我们做了修改的n个文件,从对方的压缩包中解压出来(记得 仍然保持这些文件的源码树结构,而不是将他们解压到同一个目录中)。假设解压到 new_version 目录中,记得将此目录做个备份 new_version_bak;
Ø 用 Beyond Compare (或其他对比软件)将 new_version 与旧软件版本 做对比来合代码;
Ø 合代码后,将 new_version 打包,发给其他开发人员,则对方只需解压该压缩包到源码树的根目录下就ok了,而不需要将这n个文件一个个做替换。如果项目采用cvs的话,也可以讲这个压缩包解压到cvs的根目录下。
这三个步骤中,后两个步骤或许用机器 合软件 大家不放心,但第一个步骤纯粹是重复工作,修改的文件一多,工作量将相当可怕,最好是能交给计算机做。这个工作概括起来就是:
前提:新版本压缩包 new_version.rar、旧版本中与对方提供的原始平台不同的文件以原先源码树的方式统一存放到 old_version 目录下;
需求:将 new_version.rar 中与 old_version 目录下相同的文件提取出来,存放到 new_version 下。
1.2 解决思路
根据上面的需求,我们需要这么几个步骤:Ø 将 old_version 中的文件以绝对路径的方式列在一张表上,这个工作太适合让perl这种文本处理语言了;
Ø 让 winrar 根据这张表解压对应文件,这也可以采用 winrar x new_version.rar @new_version.lst ;
2 工具的使用
为了完成上面的工作,我用perl语言和make写了个工具包,下面讨论下其用法。2.1 工具包含的文件
该工具包需要用到 make、perl 等工具,包含的文件如下:机器上还必须有安装 perl 程序。
Toolkit
├:make 工具
│ ├libiconv2.dll
│ ├libintl3.dll
│ └make.exe
├:patch 工具
│ ├make.bat
│ ├Makefile
│ └开发工具_patch工具的使用.doc:本文档
└: perl 脚本,下面列出这些perl脚本的功能
├ls_dir.pl:以绝对路径列出指定目录下的文件和目录,类似于linux下的 ls 命令
├mk_dir.pl:新建目录
├replace_str.pl:以正则表达式的方式替换字符
├rm_dir.pl:删除目录
└rm_file.pl:删除文件
2.2 执行步骤
真正的步骤只有两步:Ø make clean :清除patch/build 目录;
Ø make :生成欲修改文件列表以及new_version 目录,它们均位于patch/build 下。
但在执行这两步之前,我们必须先配置 make.bat 和 Makefile 两个文件。
2.3 配置工作
2.3.1 make.batE:/Tech/Document/Tools/Toolkit/Make/make -r -R MAKESHELL=CMD %*
请将 E:/Tech/Document/Tools/Toolkit/Make/make 修改为您PC上make工具存放地址。
2.3.2 Makefile
该文件一般有这么几个地方要改:
PERL_DIR = E:/Tech/Document/Tools/Toolkit/Perl # 蓝色字体修改为上述perl脚本所在目录
RAR_BIN = D:/Program Files/WinRAR/rar.exe # 蓝色字体修改为winrar程序所在目录
PREV_VER_DIR = E:/Tech/Project/ Bak/old_version_bak # 蓝色字体修改为old_version 的绝对路径
RAR_FILE = E:/Tech/Project/new_version.rar # 蓝色字体修改为new_version.rar的绝对路径
STR_DST = new_version # 蓝色字体修改为压缩包里面的第一级目录名
3 附录
3.1 Perl 语言
有兴趣的话,可以参考《Perl语言入门》。3.2 关于winrar
大家都习惯于winrar压缩软件的图形界面操作,很多人都不知道它还有个 命令行模式(或称dos版吧)Rar.exe。下面列出patch工具用到的几条rar命令:常规的命令行语法描述如下:
WinRAR <命令> -<开关1> -<开关N> <压缩文件 > <文件...> <@列表文件...> <解压路径/>
添加压缩文件命令—a
rar a test.rar 1.txt :添加 1.txt 到压缩包 test.rar中,若无test.rar,则新建它;
添加压缩文件命令—a
rar a test.rar 1.txt :添加 1.txt 到压缩包 test.rar中,若无test.rar,则新建它;
添加压缩注释—c
rar c –z2.txt test.rar :将 2.txt 作为 test.rar的注释;
rar –z2.txt a test.rar 1.txt :上面两步的集合;
解压命令—x
rar x test.rar 1.txt :将1.txt从test中解压出来;
将test.lst文件从test.rar中解压出来—@test.lst
rar x test.rar @test.lst:
关于 winrar 软件的其他方面可参考该软件目录下的 WinRAR.chm,winrar软件的命令和开关不区分大小写。
4 联系方式
希望这份文档对您有所帮助,若您发现任何问题或有任何更好的建议,欢迎与我联系!温陵布衣:
MSN: sikinzen@hotmail.com
Mail: sikinzen @yahoo.com.cn
QQ: 526679213
注:工具包请到我的共享下载:http://sikinzen.download.csdn.net/
相关文章推荐
- golang语言实现读取csv文件内容,把相同的内容提取到另外一个文件
- 如何在JSP页面中通过一个按钮,在对话框中选择一个目录而不是选择一个文件;input type=file只能选择一个文件,我想选择一个目录;做不出来项目经理要扣奖金的...............
- 在一个项目中,建立多个工程文件多个目录创建方法
- Java作业:给定任意一个目录 ,以树形方式展示出该目录中的所有子目录和文件。另外,在展现的时候将目录排在上面,文件排在下面。每一层要加上缩进
- Unix学习笔记-------目录遍历实例----Linux下判断是否是一个目录还是一个文件的方法
- 【转】static和extern的区别;当使用另外一个文件中的变量、类、方法时,什么时候改用extern声明,什么时候该include?
- java、android 对比两个目录或文件是否是同一个目录或文件的方法
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- magento------在block对应的phtml文件中加载子block的另外一种简洁快速的方法
- VC判断一个文件为目录的方法
- Properties文件不在项目目录下的一种读取方法
- 批处理 把文本中指定的文件从一个目录复制到另外一个目录
- Linux 判断是否是一个目录还是一个文件的方法
- 在EXE文件中如何实现调用另外一个EXE文件中的方法?
- Activity任务栈的管理 -----销毁前一个相同的activity(还有一种简单的方法实现)
- shell脚本,根据时间范围压缩时间目录成一个文件
- 汇编语言:请写一个程序把当前目录下的TEXT.TXT文件中的字符读出来显示在屏幕上,当遇到结束符时就停止读取。
- 7、定义一个文件输入流,调用read(byte[] b) 方法将exercise.txt文件中的所有内容打印出来(byte数组的大小限制为5,不考虑中文编码问题)。
- [Tools]Windows 7(64)系統下提取 deb 文件中的某个文件的一种方法
- 使用php将某个目录下面的所有文件罗列出来的方法详解