11

使用 FileUtilscp_r通常是我复制目录的方式,但我似乎无法排除基本目录。这就是我想要的工作,但它没有:

FileUtils.cp_r "#{source_path}\\**", target_path, :verbose => true

source_path有我想递归复制的子目录。我只是不想要实际的source_path目录,只想要它下面的所有内容。

我尝试使用Dir.glob但无法正确使用。

这是一个 Windows 副本,我知道我可以使用xcopy但想知道如何在 Ruby 中进行操作。

4

2 回答 2

11

您想使用source_path/.而不是source_path/**,如文档的最后一个示例中所述

➜  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
于 2013-10-15T21:47:03.460 回答
4

请使用该FileUtils.copy_entry实用程序。提供源和目标的完整路径。它将递归地从源复制到目标,不包括源父目录。此方法保留文件类型、cf 符号链接、目录……(尚不支持 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)

srcdest都必须是路径名。src 必须存在,dest 必须不存在。

如果preserve 为 true,则此方法保留所有者、组、权限和修改时间。可选使用。

如果dereference_root 为 true,则此方法取消引用树根。可选使用。

如果remove_destination 为 true,则此方法在复制前删除每个目标文件。可选使用。

有关更多信息,请查看文档

于 2017-12-08T07:28:18.657 回答