Copie d'une hierarchie de répertoires.

C'est un exemple de parcours récursif d'un arbre en profondeur d'abord.

Notons que la commande n'est pas équivalente à 'cp -r'.

#!/usr/bin/env ruby
require 'ftools'

def cp_tree(from, to, verbose = false)
  File.makedirs(to)
  Dir.foreach(from) do |fr|
    next if fr == '.' || fr == '..'
    f = "#{from}/#{fr}"
    t = "#{to}/#{fr}"
    if test(?d, f)
      cp_tree(f, t, verbose)
    else
      File.cp(f, t, verbose)
    end
  end
end

if ARGV.size < 2
  raise(ArgumentError, 'usage : "cptree [--verbose] from to"')
end
verbose = false
if ARGV[0] == '--verbose'
  # FIXME : il n'est pas possible de copier un repertoire
  # appelé --verbose
  verbose = true
  ARGV.shift
end
cp_tree(ARGV[0], ARGV[1], verbose)
keywords : Ruby, snippet, recursion
OSI Certified Open Source Software