gpt4 book ai didi

ruby - 使用 FileUtils 在 ruby​​ 中移动包含空格的文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:10 24 4
gpt4 key购买 nike

我使用的是 Mac OS X,我正在尝试编写一个小脚本,将文件移动到特定文件夹。我正在使用 FileUtils API,因为我不想运行系统特定的命令 (system("mv a b")。

脚本看起来像这样:

#!/usr/bin/env ruby
require 'rubygems'
require 'escape'
require 'fileutils'

absolut_input_filename = Escape.shell_single_word ARGV[0]
move_folder = Escape.shell_single_word "/move/to/folder"
FileUtils.mv absolut_input_filename, move_folder

只要输入文件名不包含空格,一切正常。但是一旦我放入一个带有空格的文件,错误输出就是这样的:

./scripts/success/path/to/file\with\空格

/usr/local/Cellar/ruby/1.9.2-p0/lib/ruby/1.9.1/fileutils.rb:1418:in `stat': No such file or directory - '/path/to/file with space' (Errno::ENOENT)
from /usr/local/Cellar/ruby/1.9.2-p0/lib/ruby/1.9.1/fileutils.rb:1418:in `block in fu_each_src_dest'
from /usr/local/Cellar/ruby/1.9.2-p0/lib/ruby/1.9.1/fileutils.rb:1432:in `fu_each_src_dest0'
from /usr/local/Cellar/ruby/1.9.2-p0/lib/ruby/1.9.1/fileutils.rb:1416:in `fu_each_src_dest'
from /usr/local/Cellar/ruby/1.9.2-p0/lib/ruby/1.9.1/fileutils.rb:504:in `mv'
from ./scripts/success:8:in `<main>'

为了转义,我使用版本 0.0.4 中的 'escape' gem,其中 shell_single_word 如下所示:

  def shell_single_word(str)
if str.empty?
"''"
elsif %r{\A[0-9A-Za-z+,./:=@_-]+\z} =~ str
str
else
result = ''
str.scan(/('+)|[^']+/) {
if $1
result << %q{\'} * $1.length
else
result << "'#{$&}'"
end
}
result
end
end

最佳答案

你可以不使用转义

require 'fileutils'
absolut_input_filename = ARGV[0]
move_folder = "/move/to/folder"
FileUtils.mv absolut_input_filename, move_folder

关于ruby - 使用 FileUtils 在 ruby​​ 中移动包含空格的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3963664/

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