Ruby 按扩展名复制文件
Ruby copy file by extension
我正在尝试从 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
ArgumentError: wrong number of arguments (given 3, expected 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
方法,这就是错误原因:
no implicit conversion of String into 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']}/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
)
我正在尝试从 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
ArgumentError: wrong number of arguments (given 3, expected 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
方法,这就是错误原因:
no implicit conversion of String into 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']}/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
)