美国的同事经常给我发点儿source, 其实他可以只给我发差分的内容,
但是这样一来, 我就无法知道某个文件, 到底是老美是删除了他, 还是没有变更.
所以我们通常的做法, 就是把整个工程发过来,
(不要问我, 问什么我们不使用同一个版本控制...这个问题很难回答)
于是我就很想知道, 这两版source到底有什么不同,
我想删除那些相同的文件,
这个操作可以在Beyond Compare中点几下按钮来完成.
为了比点按钮更快, 也为了练习一下ruby, 把这个脚本用ruby实现如下:
require "fileutils"
require "pathname"
dir1 = 'I:/temp/test_for_ruby/121102_OLD'
dir2 = 'I:/temp/test_for_ruby/121221_NEW'
Dir.glob("#{dir1}/**/*") do |item|
next if item == '.' or item == '..'
next if File.directory? item
coordinate_item = Pathname.new(dir2)+ Pathname.new(item).relative_path_from(Pathname.new(dir1))
next unless File.exist? coordinate_item
FileUtils.rm [item,coordinate_item] if FileUtils.compare_file(item,coordinate_item)
end
脚本中, glob的参数, 连续使用了两个**, 目的是为了遍历所有的子文件夹.
再就是操作相对路径的部分有一点儿长,
其余还都算很接近自然语言