我试图从Chef执行以下命令Ruby块并给出以下错误。
FileUtils.cp_r Dir.glob "#{node['default']['home']}/standalone/deployments/'*.ear'", "#{node['default']['default_backup_path']}/oms_bkp_#{time}", :noop => true, :verbose => true
ArgumentError:参数数量错误(给定3,预期1..2)
答案 0 :(得分:1)
你的Dir.glob
方法很可能需要括号,它只是传递第一个参数,其余的被认为是FileUtils.cp_r
参数,试试:< / p>
FileUtils.cp_r(
Dir.glob(
"#{node['default']['home']}/standalone/deployments/'*.ear'",
"#{node['default']['default_backup_path']}/oms_bkp_#{time}"
),
'destination/',
noop: true,
verbose: true
)
您正在向patterns
方法传递两个glob
参数,这就是导致错误的原因:
没有将String隐式转换为Integer(TypeError)
尝试对每种模式使用cp_r
,例如:
FileUtils.cp_r(
Dir.glob("#{node['default']['home']}/standalone/deployments/'*.ear'"),
'destination/',
noop: true,
verbose: true
)
FileUtils.cp_r(
Dir.glob("#{node['default']['default_backup_path']}/oms_bkp_#{time}"),
'destination/',
noop: true,
verbose: true
)
我认为你的目标是迭代获取
中的元素"#{node['default']['home']}/standalone/deployments/'*.ear'"
"#{node['default']['default_backup_path']}/oms_bkp_#{time}"
所以你可以迭代这两个目录,并在Dir.glob
方法中使用这个模式,如:
patterns = [
"#{node['default']['home']}/standalone/deployments/'*.ear'",
"#{node['default']['default_backup_path']}/oms_bkp_#{time}"
]
patterns.each do |pattern|
FileUtils.cp_r Dir.glob(pattern), 'destination/', noop: true, verbose: true
end
'destination/'
是要复制元素的文件夹,而您将丢失。
如果您想使用default_backup_path
文件夹作为目的地,那么您不需要Dir.glob
方法,只需将其添加为dest
参数,一个字符串
FileUtils.cp_r(
Dir.glob("#{node['default']['home']}/standalone/deployments/'*.ear'"),
"#{node['default']['default_backup_path']}/oms_bkp_#{time}",
noop: true,
verbose: true
)