如何匹配前五个字符的路径

我必须到达位置/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 

这将匹配一个filenename与前五个字符以及之后的任何内容:

 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, ...} 

此外,您的示例没有正确使用块语法,并且没有rescue begin..end ,它基本上什么也没做。 它应该成为:

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

Dir.glob返回一个Array ,它是结果的集合。 Array.each返回一个Enumerator ,它基本上是一个对象,它运行以下代码块,其新值与可用的新值一样多,这意味着您可以使用它为所有结果运行相同的代码块Dir.glob 。 该值通过|block_argument|传递给块 句法。

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

 begin # do something that generates an exception rescue => exception # handle the exception end 

begin没有rescueensureelse也不做。

此外,这与之前的问题非常相似。