【问题标题】:List all paths recursively when name of top directory may contain glob characters当顶级目录的名称可能包含全局字符时,递归列出所有路径
【发布时间】:2019-01-07 02:13:23
【问题描述】:

在 Ruby 中,我们可以递归地列出目录的所有内容,如下所示:

dir = '/tmp'
Dir.glob("#{dir}/**/*") # Works

但是,如果目录名称中包含 glob 字符,则会失败

dir = '/tmp/test[folder]ing'
Dir.glob("#{dir}/**/*") # Does not work

当我们不知道将传递给我们脚本的目录名称时(例如,当它作为参数给出时)时,一种解决方案是抢先从其名称中转义有问题的字符

dir = '/tmp/test[folder]ing'
escaped_dir = dir.gsub(/([\*\?\[\]{}\\])/, '\\\\\1')
Dir.glob("#{escaped_dir}/**/*") # Works

这可行,但有点难看,感觉很hacky,并且需要跟踪两个变量来处理稍微不同的事情(未转义的名称对其他操作很有用)。

对于同样的问题还有其他解决方案吗(理想情况下运行起来不会太慢)?

【问题讨论】:

标签: ruby glob


【解决方案1】:

Pathname可以做到:

require 'pathname'

dir = '/tmp/test[folder]ing'
Pathname(dir).glob('**/*')

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2011-12-23
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多