当顶层目录名称可能包含全局字符时,递归列出所有路径

问题描述 投票:1回答:1

在Ruby中,我们可以像这样递归列出目录的所有内容:

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

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

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

这有效,但是有点丑陋,让人感觉很笨拙,并且需要跟踪两个变量来处理稍有不同的事物(未转义的名称对于其他操作很有用)。

是否存在针对同一问题的其他解决方案(理想情况下,运行起来不会太慢)?

ruby glob
1个回答
0
投票

Pathname可以做到:

Pathname
© www.soinside.com 2019 - 2024. All rights reserved.