【问题标题】:Ruby Make Dir.glob works on path including tilde ~Ruby Make Dir.glob 适用于包括波浪号的路径~
【发布时间】:2019-06-01 07:38:27
【问题描述】:

Dir.glob("*", File::FNM_DOTMATCH) 遇到包含类似波浪号的文件路径时,我得到了一个 nil 返回:

  ~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!  

我该如何解决这个问题?

【问题讨论】:

    标签: ruby path tilde


    【解决方案1】:

    这个问题与波浪号无关。

    Dir::glob 不承诺返回排序列表。我怀疑您的 shift(2) 旨在摆脱 ... 但它们不是列表中的前两项。此外,您不需要使用 banged 版本的reverse 来原地反转。

    明确拒绝这些虚拟目录:

      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
    

    【讨论】:

    • 为了避免 ... 只需省略 File::FNM_DOTMATCH 参数。
    猜你喜欢
    • 2021-10-15
    • 2010-12-13
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多