检查目录中是否存在数组中的某些文件
Check if some files in array exist in directory
我写了下面的代码来重命名目录中的一些文件(从 'rb'
到 'origin'
):
original_files = ['test1.rb', 'test2.rb']
ruby_block "Rename file" do
block do
for filename in original_files
newname = filename.split(".")[0] + '.origin'
::File.rename("C:\Test\#{filename}", "C:\Test\#{newname}")
end
end
end
当我第二次 运行 时,我收到这些文件不存在的错误,这是预期的。
如何检查这些文件是否存在,如下所示:
if ::File.exist?("C:\Test\*.origin")
Chef::Log.info("########## Your files are already renamed ############")
else
my_code
end
或者以另一种方式(也许循环检查)?
经过多次尝试,这是我的解决方案:
origin_files = ['test1.rb', 'test2.rb']
dir_path = "C:\Test"
ruby_block "Rename file" do
block do
for filename in origin_files
newname = filename.split(".")[0] + '.origin'
if ::File.exist?("#{dir_path}\#{newname}")
Chef::Log.info("### Your file: #{newname} already renamed ###")
else
::File.rename("#{dir_path}\#{filename}", "#{dir_path}\#{newname}")
end
end
end
end
你可以像这个代码一样检查这个文件
files = ["test1.rb", "test2.rb"]
path = "C:/test"
files.each { |file_name|
base_name = File.basename(file_name, ".rb")
new_name = base_name + ".origin"
if File.exists?(File.join(path, new_name))
Chef::Log.info("########## Your file #{base_name} are already renamed ############")
elsif File.exists?(File.join(path, file_name))
File.rename(File.join(path, file_name), File.join(path, new_name))
Chef::Log.info("########## Your file #{base_name} was renamed ############")
else
Chef::Log.info("########## Your file #{file_name} not exist ############")
end
}
您可以为此使用 Chef guard。它在 chef-client 运行 期间自动将事件记录为
ruby_block xxx (skipped due to not_if)
示例如下:
origin_files = ['test1.rb', 'test2.rb']
dir_path = "C:\Test"
origin_files.each do | old_file |
base_name = File.basename(old_file, ".rb")
newfile = base_name + ".origin"
ruby_block "rename #{old_file}" do
block do
File.rename(File.join(dir_path, old_file), File.join(dir_path, newfile))
end
not_if { File.exist?("#{dir_path}\#{newfile}") }
end
end
我写了下面的代码来重命名目录中的一些文件(从 'rb'
到 'origin'
):
original_files = ['test1.rb', 'test2.rb']
ruby_block "Rename file" do
block do
for filename in original_files
newname = filename.split(".")[0] + '.origin'
::File.rename("C:\Test\#{filename}", "C:\Test\#{newname}")
end
end
end
当我第二次 运行 时,我收到这些文件不存在的错误,这是预期的。
如何检查这些文件是否存在,如下所示:
if ::File.exist?("C:\Test\*.origin")
Chef::Log.info("########## Your files are already renamed ############")
else
my_code
end
或者以另一种方式(也许循环检查)?
经过多次尝试,这是我的解决方案:
origin_files = ['test1.rb', 'test2.rb']
dir_path = "C:\Test"
ruby_block "Rename file" do
block do
for filename in origin_files
newname = filename.split(".")[0] + '.origin'
if ::File.exist?("#{dir_path}\#{newname}")
Chef::Log.info("### Your file: #{newname} already renamed ###")
else
::File.rename("#{dir_path}\#{filename}", "#{dir_path}\#{newname}")
end
end
end
end
你可以像这个代码一样检查这个文件
files = ["test1.rb", "test2.rb"]
path = "C:/test"
files.each { |file_name|
base_name = File.basename(file_name, ".rb")
new_name = base_name + ".origin"
if File.exists?(File.join(path, new_name))
Chef::Log.info("########## Your file #{base_name} are already renamed ############")
elsif File.exists?(File.join(path, file_name))
File.rename(File.join(path, file_name), File.join(path, new_name))
Chef::Log.info("########## Your file #{base_name} was renamed ############")
else
Chef::Log.info("########## Your file #{file_name} not exist ############")
end
}
您可以为此使用 Chef guard。它在 chef-client 运行 期间自动将事件记录为
ruby_block xxx (skipped due to not_if)
示例如下:
origin_files = ['test1.rb', 'test2.rb']
dir_path = "C:\Test"
origin_files.each do | old_file |
base_name = File.basename(old_file, ".rb")
newfile = base_name + ".origin"
ruby_block "rename #{old_file}" do
block do
File.rename(File.join(dir_path, old_file), File.join(dir_path, newfile))
end
not_if { File.exist?("#{dir_path}\#{newfile}") }
end
end