Method: FileUtils.cp_r
- Defined in:
- lib/fileutils.rb
.cp_r(src, dest, preserve: nil, noop: nil, verbose: nil, dereference_root: true, remove_destination: nil) ⇒ Object
Recursively copies files.
Arguments src (a single path or an array of paths) and dest (a single path) should be interpretable as paths.
The mode, owner, and group are retained in the copy; to change those, use FileUtils.install instead.
If src is the path to a file and dest is not the path to a directory, copies src to dest:
FileUtils.touch('src0.txt')
File.exist?('dest0.txt') # => false
FileUtils.cp_r('src0.txt', 'dest0.txt')
File.file?('dest0.txt') # => true
If src is the path to a file and dest is the path to a directory, copies src to dest/src:
FileUtils.touch('src1.txt')
FileUtils.mkdir('dest1')
FileUtils.cp_r('src1.txt', 'dest1')
File.file?('dest1/src1.txt') # => true
If src is the path to a directory and dest does not exist, recursively copies src to dest:
tree('src2')
# => src2
# |-- dir0
# | |-- src0.txt
# | `-- src1.txt
# `-- dir1
# |-- src2.txt
# `-- src3.txt
FileUtils.exist?('dest2') # => false
FileUtils.cp_r('src2', 'dest2')
tree('dest2')
# => dest2
# |-- dir0
# | |-- src0.txt
# | `-- src1.txt
# `-- dir1
# |-- src2.txt
# `-- src3.txt
If src and dest are paths to directories, recursively copies src to dest/src:
tree('src3')
# => src3
# |-- dir0
# | |-- src0.txt
# | `-- src1.txt
# `-- dir1
# |-- src2.txt
# `-- src3.txt
FileUtils.mkdir('dest3')
FileUtils.cp_r('src3', 'dest3')
tree('dest3')
# => dest3
# `-- src3
# |-- dir0
# | |-- src0.txt
# | `-- src1.txt
# `-- dir1
# |-- src2.txt
# `-- src3.txt
If src is an array of paths and dest is a directory, recursively copies from each path in src to dest; the paths in src may point to files and/or directories.
Keyword arguments:
-
dereference_root: false- ifsrcis a symbolic link, does not dereference it. -
noop: true- does not copy files. -
preserve: true- preserves file times. -
remove_destination: true- removesdestbefore copying files. -
verbose: true- prints an equivalent command:FileUtils.cp_r('src0.txt', 'dest0.txt', noop: true, verbose: true) FileUtils.cp_r('src1.txt', 'dest1', noop: true, verbose: true) FileUtils.cp_r('src2', 'dest2', noop: true, verbose: true) FileUtils.cp_r('src3', 'dest3', noop: true, verbose: true)Output:
cp -r src0.txt dest0.txt cp -r src1.txt dest1 cp -r src2 dest2 cp -r src3 dest3
Raises an exception of src is the path to a directory and dest is the path to a file.
Related: methods for copying.
986 987 988 989 990 991 992 993 |
# File 'lib/fileutils.rb', line 986 def cp_r(src, dest, preserve: nil, noop: nil, verbose: nil, dereference_root: true, remove_destination: nil) "cp -r#{preserve ? 'p' : ''}#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose return if noop fu_each_src_dest(src, dest) do |s, d| copy_entry s, d, preserve, dereference_root, remove_destination end end |