2016-03-03 51 views
1

存在於陣列的一些文件,我寫了下面的代碼放在一個目錄(從'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 

或以另一種方式(也許要檢查它的循環)?

+0

使用'Dir'類。 – sawa

+0

嗨sawa,謝謝你的迴應,你可以把它寫入我的代碼(我試過這個解決方案,並沒有工作)。謝謝 – goldver

+0

爲了得到沒有擴展名的文件名,使用'File.basename('test1.rb','.rb')' – Stefan

回答

1

這是無數次嘗試後,我的解決方案:

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 
0

您可以檢查此文件,這樣的代碼

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 
} 
0

可以使用廚師後衛這個目的。它會自動記錄廚師客戶端運行的

ruby​​_block XXX活動期間(跳過由於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