【发布时间】:2021-12-08 07:03:44
【问题描述】:
如何复制仅以字母开头而不以数字开头的文件夹。我正在尝试类似的东西
Dir.glob("folderpath/[a-z]").each do|f|
FileUtils.cp_r f, "dest"
end
【问题讨论】:
-
也许
Dir.glob("folderpath/[a-z]*").each ...
如何复制仅以字母开头而不以数字开头的文件夹。我正在尝试类似的东西
Dir.glob("folderpath/[a-z]").each do|f|
FileUtils.cp_r f, "dest"
end
【问题讨论】:
Dir.glob("folderpath/[a-z]*").each ...
Dir glob 期望匹配整个名称(与正则表达式不同)。
所以,你需要这样做:
Dir.glob("folderpath/[a-z]*").each{|f|FileUtils.cp_r(f,"dest")}
(如果您愿意,请使用do 语法)
见https://ruby-doc.org/core-3.0.0/Dir.html#method-c-glob
请注意,如果底层文件系统不区分大小写,则匹配是不区分大小写的,尽管模式是小写的。
例如,在 Mac 上它匹配 README 等
如果你更喜欢正则表达式,或者需要更复杂的测试,你可以使用:
Dir.foreach("folderpath").
select{|n|n.match(/^[a-z]/)}.
map{|n|File.join("folderpath",n)}.
each{|f|FileUtils.cp_r(f,"dest")}
这里我们使用正则表达式。请注意,即使底层文件系统不区分大小写,它也区分大小写。如果需要,在最后一个 / 之后添加 i 以使大小写不敏感。 map这里是添加文件夹路径,这样可以添加cp_r
【讨论】: