Ruby Make Dir.glob在包括波浪号的路径上工作〜

时间:2019-01-06 10:59:18

标签: ruby path tilde

Dir.glob("*", File::FNM_DOTMATCH)遇到包含这样的代字号的文件路径时,我得到零回报:

  ~setup~.mak                            253.0 B

这是整个说明:

l = 
  Dir.
    glob("*", File::FNM_DOTMATCH).
    tap { |a| a.shift(2) }.
    map { |p,i| p.force_encoding('utf-8')}.
    sort_by { |d| File.mtime(d) }.reverse!  

我该如何解决?

1 个答案:

答案 0 :(得分:0)

此问题与波浪号无关。

Dir::glob不保证返回已排序的列表。我怀疑您的shift(2)是为了摆脱...,但它们不是列表中的前两项。另外,您无需使用reverse banged 版本来反转就位。

明确拒绝这些幻像目录:

  Dir.
    glob("*", File::FNM_DOTMATCH).
    reject { |a| a =~ /\A\.+\z/ }. # ⇐ THIS
    map { |p, i| p.force_encoding(Encoding::UTF_8) }.
    sort_by { |d| File.mtime(d) }.
    reverse

  # $ touch ~setup~.mak
  # $ ruby -e 'puts Dir.glob("*", File::FNM_DOTMATCH).reject { |a| a =~ /\A\.+\z/ }'
  #⇒ ~setup~.mak