但是,如果存在冲突,我还需要一种方法来重命名它们。
赞if exists? then file.name = "1-"+file.name
或类似的东西
答案 0 :(得分:6)
也许这样的事情适合你:
origin = '/test_dir'
destination = '/another_test_dir'
Dir.glob(File.join(origin, '*')).each do |file|
if File.exists? File.join(destination, File.basename(file))
FileUtils.move file, File.join(destination, "1-#{File.basename(file)}")
else
FileUtils.move file, File.join(destination, File.basename(file))
end
end
最好的问候。
答案 1 :(得分:3)
上面的代码有效,但是没有错,你正在使用if File.exists?(file)
,它正在检查文件是否在origin文件夹/或子文件夹中退出(这是没用的,因为它已经被读取,因为它已经存在)。您需要检查目标文件夹中是否已存在文件。由于这种语法,“else”永远不会被执行。并且所有文件都被命名为“1-filename”。
正确的是使用
if File.exists? File.join(destination, File.basename(file))
答案 2 :(得分:0)
另一种选择是在外壳中运行命令并处理响应:
command = "mv *.* #{ new_directory }/"
response = system command
处理现有文件名等是另一回事。