如何将路径与前五个字符匹配

时间:2018-10-19 06:59:00

标签: ruby chef

我必须到达位置/var/log/acpchef/commv123,在那里123可以更改为456

我很累Dir.glob。我需要/var/log/acpchef/commv***。我的死刑将在mixlibshellout中。

begin
  cwd_kernel = Dir.glob('/var/cache/acpchef/commv***')
  cmd = Mixlib::ShellOut.new("commandrun", :cwd => cwd_kernel)
  cmd.run_command
  log 'run'
end 

1 个答案:

答案 0 :(得分:2)

这将使文件名与前五个字符以及后面的任何字符匹配:

class A {
  static String method1(string a)
  {
    B b=new B;
    //some changes applied on a
    return b.method3(a);
  }

  String method2(String a)
  { 
    return A.method1(a);
  }
}

class B {
  String method3(String a)
  {
    C c=new C();
    //some changes applied on a
    return c.method4(a);
  }
}

class C {
  String method4(String a)
  {
    // some changes applied on a
    return a;
  }
}

这将使文件名与任何三个额外字符相匹配:

Dir.glob('/var/cache/acpchef/commv*') 
# will match /var/cache/acpchef/commv12345abcdxyz123456

这将匹配具有三个数字的文件名:

Dir.glob('/var/cache/acpchef/commv???') 
# will match /var/cache/acpchef/{commv123, commv456, commvabc, ...}

此外,您的示例未正确使用块语法,并且具有Dir.glob('/var/cache/acpchef/commv[0-9][0-9][0-9]') # will match /var/cache/acpchef/commv{123, 234, 456, 999, ...} 而没有begin..end,这实际上什么也不做。它应该变成:

rescue

Dir.glob('/var/cache/acpchef/commv???').each do |cwd_kernel| cmd = Mixlib::ShellOut.new("commandrun", :cwd => cwd_kernel) cmd.run_command log 'run' end 返回一个Array,它是结果的集合。 Dir.glob返回一个Enumerator,它基本上是一个对象,它使用新值运行具有新值的以下代码块的次数,这意味着您可以使用它来运行同一块代码Array.each的所有结果的代码集。该值通过Dir.glob语法传递到该块。

ruby​​中的begin关键字用于捕获错误:

|block_argument|

没有begin # do something that generates an exception rescue => exception # handle the exception end beginrescue的{​​{1}}无效。

此外,这与previous question非常相似。