使用FileUtils cp_r
通常是我复制目录的方式,但我似乎无法排除基目录。这就是我想要的工作,但事实并非如此:
FileUtils.cp_r "#{source_path}\\**", target_path, :verbose => true
source_path
包含我想要递归复制的子目录。我只是不想要实际的source_path
目录,只需要它下面的所有内容。
我尝试使用Dir.glob
,但无法正确使用。
这是一个Windows副本,我知道我可以使用xcopy
但想知道如何在Ruby中使用它。
答案 0 :(得分:7)
您想使用source_path/.
代替source_path/**
,如documentation
➜ fileutils ls
cp_files.rb dst source
➜ fileutils tree source
source
├── a.txt
├── b.txt
├── c.txt
└── deep
└── d.txt
1 directory, 4 files
➜ fileutils tree dst
dst
0 directories, 0 files
➜ fileutils cat cp_files.rb
require 'fileutils'
FileUtils.cp_r "source/.", 'dst', :verbose => true
➜ fileutils ruby cp_files.rb
cp -r source/. dst
➜ fileutils tree dst
dst
├── a.txt
├── b.txt
├── c.txt
└── deep
└── d.txt
1 directory, 4 files
这就是cp_files.rb的样子:
require 'fileutils'
FileUtils.cp_r "source/.", 'dst', :verbose => true
答案 1 :(得分:2)
请使用FileUtils.copy_entry
实用程序。为源和提供完整的路径。目的地。除源源父目录外,它将从源递归复制到目标。此方法保留文件类型,c.f。符号链接,目录...(不支持FIFO,设备文件等)
使用示例:
src = "/path/to/source/dir"
dest = "/path/to/destination/dir"
preserve = false
dereference_root = false
remove_destination = false
FileUtils.copy_entry(src, dest, preserve, dereference_root, remove_destination)
src 和 dest 都必须是路径名。 src必须存在,dest必须不存在。
如果保留为真,此方法会保留所有者,组,权限和修改时间。可选用途。
如果 dereference_root为true ,则此方法取消引用树根。可选用途。
如果 remove_destination为true ,此方法会在复制前删除每个目标文件。可选用途。
有关详细信息,请check out the documentation。