Issue #6337 has been updated by bitsweat (Jeremy Kemper).


"Sync" can mean many things. See the long list of options on rsync's man page. This makes sense as a separate library that relies on FileUtils. It's a complex high-level feature, not a low-level "composable" operation like mv or rm.
----------------------------------------
Feature #6337: FileUtils#sync
https://bugs.ruby-lang.org/issues/6337#change-26080

Author: trans (Thomas Sawyer)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: lib
Target version: 1.9.3


=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/