From: "mame (Yusuke Endoh)" Date: 2012-11-24T14:15:57+09:00 Subject: [ruby-core:50016] [ruby-trunk - Feature #6337] FileUtils#sync Issue #6337 has been updated by mame (Yusuke Endoh). Target version changed from 1.9.3 to next minor ---------------------------------------- Feature #6337: FileUtils#sync https://bugs.ruby-lang.org/issues/6337#change-33790 Author: trans (Thomas Sawyer) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: lib Target version: next minor =begin I'd like to see some sort of FileUtils#sync method to sync the contents of one directory with another. Here is a prototype definition: # # Synchronize a destination directory with a source directory. # def sync(src, dst, options={}) src_files = Dir[File.join(src, '**', '*')].map{ |f| f.sub(src+'/', '') } dst_files = Dir[File.join(dst, '**', '*')].map{ |f| f.sub(dst+'/', '') } removal = dst_files - src_files rm_dirs, rm_files = [], [] removal.each do |f| path = File.join(dst, f) if File.directory?(path) rm_dirs << path else rm_files << path end end rm_files.each { |f| rm(f) } rm_dirs.each { |d| rmdir(d) } src_files.each do |f| src_path = File.join(src, f) dst_path = File.join(dst, f) if File.directory?(src_path) mkdir_p(dst_path) else parent = File.dirname(dst_path) mkdir_p(parent) unless File.directory?(parent) install(src_path, dst_path) end end end I haven't tested this beyond a simple trial. It needs improvement. For one, it probably should be able to handle regular files as arguments too. It also needs to handle verbose and dryrun options properly. Nonetheless, with improvements, would be okay for such to become new feature for FileUtils? =end -- http://bugs.ruby-lang.org/