如何匹配前五个字符的路径
我必须到达位置/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
没有rescue
, ensure
或else
也不做。
此外,这与之前的问题非常相似。