gpt4 book ai didi

ruby-on-rails - 混合使用 Ruby 和 bash 命令——mv 返回 "x and y are the same file"

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:11 25 4
gpt4 key购买 nike

所以我有一个 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,但得到的是基本上相同的错误,但措辞不同。

有人可以帮忙吗?非常感谢。

附注我意识到我完全有可能以一种完全错误的方式来解决这个问题,所以如果是这样,请随时指出。但是,我正在尝试使用我已经了解的工具(cat、mv 等),而不是重新发明轮子。

最佳答案

你可以使用 FileUtils.mv

我经常这样做别名:

require 'fileutils'

def mv(from, to)
FileUtils.mv(from, to)
end

在 mv() 方法内部我做了额外的保护措施,即如果文件不存在,是否缺少权限等等。

如果您仍然对包含 ' ' 空白字符的文件名有问题,请尝试将文件放入 ""引号中,例如:

your_target_location = "foo/bar bla"

关于ruby-on-rails - 混合使用 Ruby 和 bash 命令——mv 返回 "x and y are the same file",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23963743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com