我正在尝试从 Chef 执行以下命令 Ruby 块并给出以下错误。
FileUtils.cp_r Dir.glob "#{node['default']['home']}/standalone/deployments/'*.ear'", "#{node['default']['default_backup_path']}/my_bkp_#{time}", :noop => true, :verbose => true
参数错误:错误的参数数量(给定 3,预期为 1..2)
很可能你的Dir.glob
方法需要括号,它只接受传递的第一个参数,其余的,被认为是一个FileUtils.cp_r
参数,尝试:
FileUtils.cp_r(
Dir.glob(
"#{node['default']['home']}/standalone/deployments/'*.ear'",
"#{node['default']['default_backup_path']}/my_bkp_#{time}"
),
'destination/',
noop: true,
verbose: true
)
您将两个patterns
参数传递给glob
方法,这就是错误的原因:
没有将字符串隐式转换为整数(类型错误)
尝试对每种模式只使用 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']}/my_bkp_#{time}"),
'destination/',
noop: true,
verbose: true
)
我认为您的目标是迭代获取元素
-
"#{node['default']['home']}/standalone/deployments/'*.ear'"
-
"#{node['default']['default_backup_path']}/my_bkp_#{time}"
因此,您可以遍历这两个目录,并在 Dir.glob
方法中使用此模式,例如:
patterns = [
"#{node['default']['home']}/standalone/deployments/'*.ear'",
"#{node['default']['default_backup_path']}/my_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']}/my_bkp_#{time}",
noop: true,
verbose: true
)