@@ -677,6 +677,8 @@ def link_entry(src, dest, dereference_root = false, remove_destination = false)
677
677
#
678
678
# Raises an exception if +src+ is a directory.
679
679
#
680
+ # Related: FileUtils.cp_r (recursive).
681
+ #
680
682
# FileUtils.copy is an alias for FileUtils.cp.
681
683
#
682
684
def cp ( src , dest , preserve : nil , noop : nil , verbose : nil )
@@ -691,30 +693,79 @@ def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
691
693
alias copy cp
692
694
module_function :copy
693
695
696
+ # Recursively copies files from +src+ to +dest+.
694
697
#
695
- # Copies +src+ to +dest+. If +src+ is a directory, this method copies
696
- # all its contents recursively. If +dest+ is a directory, copies
697
- # +src+ to +dest/src+.
698
698
#
699
- # +src+ can be a list of files.
699
+ # If +src+ is the path to a file and +dest+ is not the path to a directory,
700
+ # copies +src+ to +dest+:
700
701
#
701
- # If +dereference_root+ is true, this method dereference tree root.
702
+ # FileUtils.touch('src0.txt')
703
+ # File.exist?('dest0.txt') # => false
704
+ # FileUtils.cp_r('src0.txt', 'dest0.txt')
705
+ # File.exist?('dest0.txt') # => true
702
706
#
703
- # If +remove_destination+ is true, this method removes each destination file before copy.
707
+ # If +src+ is the path to a file and +dest+ is the path to a directory,
708
+ # copies +src+ to <tt>dest/src</tt>:
709
+ #
710
+ # FileUtils.touch('src1.txt')
711
+ # FileUtils.mkdir('dest1')
712
+ # FileUtils.cp_r('src1.txt', 'dest1')
713
+ # File.exist?('dest1/src1.txt') # => true
714
+ #
715
+ # If +src+ is the path to a directory and +dest+ does not exist,
716
+ # recursively copies +src+ to +dest+:
717
+ #
718
+ # FileUtils.mkdir_p(['src2/dir0', 'src2/dir1'])
719
+ # FileUtils.touch('src2/dir0/src0.txt')
720
+ # FileUtils.touch('src2/dir0/src1.txt')
721
+ # FileUtils.touch('src2/dir1/src2.txt')
722
+ # FileUtils.touch('src2/dir1/src3.txt')
723
+ # FileUtils.cp_r('src2', 'dest2')
724
+ # File.exist?('dest2/dir0/src0.txt') # => true
725
+ # File.exist?('dest2/dir0/src1.txt') # => true
726
+ # File.exist?('dest2/dir1/src2.txt') # => true
727
+ # File.exist?('dest2/dir1/src3.txt') # => true
728
+ #
729
+ # If +src+ and +dest+ are paths to directories,
730
+ # recursively copies +src+ to <tt>dest/src</tt>:
731
+ #
732
+ # FileUtils.mkdir_p(['src3/dir0', 'src3/dir1'])
733
+ # FileUtils.touch('src3/dir0/src0.txt')
734
+ # FileUtils.touch('src3/dir0/src1.txt')
735
+ # FileUtils.touch('src3/dir1/src2.txt')
736
+ # FileUtils.touch('src3/dir1/src3.txt')
737
+ # FileUtils.mkdir('dest3')
738
+ # FileUtils.cp_r('src3', 'dest3')
739
+ # File.exist?('dest3/src3/dir0/src0.txt') # => true
740
+ # File.exist?('dest3/src3/dir0/src1.txt') # => true
741
+ # File.exist?('dest3/src3/dir1/src2.txt') # => true
742
+ # File.exist?('dest3/src3/dir1/src3.txt') # => true
743
+ #
744
+ # Keyword arguments:
745
+ #
746
+ # - <tt>dereference_root: false</tt> - if +src+ is a symbolic link,
747
+ # does not dereference it.
748
+ # - <tt>noop: true</tt> - does not copy files.
749
+ # - <tt>preserve</tt> - preserves file times.
750
+ # - <tt>remove_destination: true</tt> - removes +dest+ before copying files.
751
+ # - <tt>verbose: true</tt> - prints an equivalent command:
752
+ #
753
+ # FileUtils.cp_r('src0.txt', 'dest0.txt', noop: true, verbose: true)
754
+ # FileUtils.cp_r('src1.txt', 'dest1', noop: true, verbose: true)
755
+ # FileUtils.cp_r('src2', 'dest2', noop: true, verbose: true)
756
+ # FileUtils.cp_r('src3', 'dest3', noop: true, verbose: true)
757
+ #
758
+ # Output:
704
759
#
705
- # # Installing Ruby library "mylib" under the site_ruby
706
- # FileUtils.rm_r site_ruby + '/mylib', force: true
707
- # FileUtils.cp_r 'lib/', site_ruby + '/mylib'
760
+ # cp -r src0.txt dest0.txt
761
+ # cp -r src1.txt dest1
762
+ # cp -r src2 dest2
763
+ # cp -r src3 dest3
708
764
#
709
- # # Examples of copying several files to target directory.
710
- # FileUtils.cp_r %w(mail.rb field.rb debug/), site_ruby + '/tmail'
711
- # FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', noop: true, verbose: true
765
+ # Raises an exception of +src+ is the path to a directory
766
+ # and +dest+ is the path to a file.
712
767
#
713
- # # If you want to copy all contents of a directory instead of the
714
- # # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
715
- # # use following code.
716
- # FileUtils.cp_r 'src/.', 'dest' # cp_r('src', 'dest') makes dest/src,
717
- # # but this doesn't.
768
+ # Related: FileUtils.cp (not recursive).
718
769
#
719
770
def cp_r ( src , dest , preserve : nil , noop : nil , verbose : nil ,
720
771
dereference_root : true , remove_destination : nil )
0 commit comments