所以我有一个Ruby脚本(使用Ruby,因为我们有一个我需要使用的预先存在的代码库)。在Ruby中我使用反引号来调用Linux命令,特别是在这种情况下," mv"命令。我试图将一个文件移动到另一个位置,但我不断收到错误消息,即x和y是"同一个文件"即使它们非常明显不是同一个文件。
以下是Ruby中的代码:
#!/usr/local/rvm/rubies/ruby-2.1.1/bin/ruby
masterFiles=[]
masterFiles << "/mnt/datadrive/Data Capture/QualityControl/UH_HRA_SVY/Scans and DataOutput/Data/UH_HRA_SVY_DATA.txt"
masterFiles << "/mnt/datadrive/Data Capture/QualityControl/UH_HRA_SVY_SPAN/Scans and DataOutput/Data/UH_HRA_SVY_SPAN_DATA.txt"
tm=Time.new.strftime("%Y%m%d")
masterFiles.each do |mf|
if File.exist?(mf)
qmf=39.chr + mf + 39.chr
`cat #{qmf} >> /tmp/QM`
savename=39.chr + \
"/mnt/datadrive/Data Capture/QualityControl/UH_HRA_SVY/Scans and DataOutput/Data/DailyFiles/" + \
File.basename(mf).gsub(".txt","_"+tm) + ".txt" + 39.chr
`mv #{qmf} #{savename}`
end
end
我得到的错误是:
mv: `/mnt/datadrive/Data Capture/QualityControl/UH_HRA_SVY_SPAN/Scans and DataOutput/Data/UH_HRA_SVY_SPAN_DATA.txt' and `/mnt/datadrive/Data Capture/QualityControl/UH_HRA_SVY/Scans and DataOutput/Data/DailyFiles/UH_HRA_SVY_SPAN_DATA_20140530.txt' are the same file
如果我更改此行:
`mv #{qmf} #{savename}`
对此:
puts "mv #{qmf} #{savename}"
然后运行输出,它按预期工作。
我很确定这与路径中的空格有关。我已经尝试了双引号,三引号,四引号和反向削减的每种组合,我可以想到解决这个问题,但没有去。我也尝试过使用FileUtils.mv,但得到的基本相同的错误措辞不同。
有人可以帮忙吗?非常感谢。
P.S。我意识到我完全有可能以完全错误的方式解决这个问题,所以如果是这样的话,请随时指出。但是,我正在尝试使用我已经掌握(cat,mv等)知识的工具,而不是重新发明轮子。
答案 0 :(得分:1)
您可以使用FileUtils.mv
我经常这样做别名:
require 'fileutils'
def mv(from, to)
FileUtils.mv(from, to)
end
在mv()方法中,我做了额外的安全措施,即如果文件不存在,如果缺少权限等等。
如果您仍然遇到包含“空白字符”的文件名问题,请尝试将文件放入“”引号中,如:
your_target_location = "foo/bar bla"