gpt4 book ai didi

ruby - 从目录树递归复制文件类型

转载 作者:可可西里 更新时间:2023-11-01 10:56:02 27 4
gpt4 key购买 nike

我正在尝试找到一种方法将所有 *.exe 文件(以及更多 *.dtd、*.obj 等)从一个目录结构复制到另一个路径。

例如我可能有:

Code
\classdirA
\bin
\classA.exe
\classdirB
\bin
\classB.exe
\classdirC
\bin
\classC.exe
\classdirD
\bin
\classD.exe

我想将所有 *.exe 文件复制到一个目录中,比如 c:\bins执行此操作的最佳方法是什么?

我的系统的限制是:

  • Windows
  • 可以是 Perl、Ruby 或 .cmd

有人知道我应该在这里看什么吗?

最佳答案

只需在 Ruby 中使用方法 Dir::glob 即可:

# this will give you all the ".exe" files recursively from the directory "Code".
Dir.glob("c:/Code/**/*.exe")

** - 递归匹配所有目录。这用于进入目录树并查找当前目录的子目录中的所有文件,而不仅仅是当前目录中的文件。示例代码中探讨了此通配符。

* - 匹配零个或多个字符。仅由星号组成且没有其他字符或通配符的 glob 将匹配当前目录中的所有文件。星号通常与文件扩展名结合使用,如果没有更多字符来缩小搜索范围的话。

不错的博客 Using Glob with Directories .

现在要复制文件到您需要的目录,您需要查看方法,FileUtils.cp_r :

require 'fileutils'
FileUtils.cp_r Dir.glob("c:/Code/**/*.exe"), "c:\\bins"

我刚刚测试过,FileUtils.cp方法也将起作用,在这种情况下:

require 'fileutils'
FileUtils.cp Dir.glob("c:/Code/**/*.exe"), "c:\\bins"

我在这里的偏好是使用::cp 方法。因为 Dir::glob 实际上是递归地收集所有具有 .exe 扩展名的文件,并将它们作为数组返回。现在 cp 方法在这里就足够了,现在只需从数组中取出每个文件并将其复制到 target 文件。

为什么我不喜欢这种情况,::cp_r 方法?

好吧,我也在这里解释一下。顾名思义,它将所有文件递归地从source复制到target目录。如果需要递归地复制特定的文件,那么 ::cp_r 将无法靠自己的力量做到这一点(因为它不能自己进行选择,: :glob 可以做到)。因此在这种情况下,你必须给它特定的文件列表,然后它会复制到目标目录。如果这是我必须做的唯一任务,那么我认为我们应该使用 ::cp,而不是 ::cp_r

希望我的解释对您有所帮助。

关于ruby - 从目录树递归复制文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com