在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
这有效,但是有点丑陋,让人感觉很笨拙,并且需要跟踪两个变量来处理稍有不同的事物(未转义的名称对于其他操作很有用)。
是否存在针对同一问题的其他解决方案(理想情况下,运行起来不会太慢)?
Pathname
可以做到:
Pathname