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)