ruby - 使用 Ruby FileUtils 时出现运行时错误

标签 ruby scripting

我已经盯着这个看了几个小时了,但不确定我做错了什么。我正在尝试编写一个简单的脚本来从外部列表中的各个位置移动 100 个左右的文件。应该很简单,当我通过 irb 运行命令时,所有内容都适用于该文件,但在运行脚本时出现错误。这是我的脚本。

#! /opt/local/bin/ruby
require 'fileutils.rb'

list_of_files = File.read "files_to_copy.txt"
source_dir = "/Volumes/data/moved_from_share/"
dest_dir = "/Volumes/data/testeroooo/"

list_of_files.each do |line|
  copy_from = source_dir + line
  copy_to = dest_dir + line
  puts copy_from
  puts copy_to
  puts
  FileUtils.cp_r(copy_from, copy_to)
end

以下是来自“files_to_copy.txt”的一些示例输入:

Accounting HG/Accounts Payable/2011/2011_06/ebi_Inv_218876.pdf
Accounting HG/Accounts Payable/2011/2011_06/expeditors_1050006142.tif
Accounting HG/Accounts Payable/2011/2011_06/expeditors_7050627938.tif

最后,这是我的错误输出:

/Volumes/data/moved_from_share/Accounting PG/Accounts Payable/2011/2011_07/
/Volumes/data/testeroooo/Accounting PG/Accounts Payable/2011/2011_07/

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:1255:in `copy': unknown file type: /Volumes/data/moved_from_share/Accounting PG/Accounts Payable/2011/2011_07/ (RuntimeError)
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:451:in `copy_entry'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:1324:in `traverse'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:448:in `copy_entry'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:423:in `cp_r'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:1411:in `fu_each_src_dest0'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:1393:in `fu_each_src_dest'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/fileutils.rb:422:in `cp_r'
    from copy_it.rb:14
    from copy_it.rb:8:in `each'
    from copy_it.rb:8

如果您有任何建议,我很乐意听到!谢谢!

最佳答案

您的文件列表可能包含 Accounting PG/Accounts Payable/2011/2011_07/ 作为条目,它是目录,而不是文件。这应该可以正常工作,因为您正在使用 cp_r

您可以覆盖它以仅复制文件(假设您的文件列表也包含子文件夹项目):

if File.file?(copy_from)
  FileUtils.cp_r(copy_from, copy_to)
end

关于ruby - 使用 Ruby FileUtils 时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713875/

相关文章:

ruby - 我可以将 factorygirl 工厂添加到共享 gem 吗

ruby-on-rails - 如何在 Rails 的 VIews 模板中创建和使用变量?

json - 无法从 ruby​​ 中解析的 JSON 哈希中提取数据

VBA:当工作簿/工作表中发生最后一个错误时,如何通过 VBA 代码获取最后使用的单元格?

linux - 如何在 Expect 脚本中返回生成的进程退出代码?

css - 样式表取决于主机名

html - 有没有办法用 Mechanize 处理动态加载的内容?

linux - Shell 脚本未按预期工作

shell - 仅当它们匹配模式时才删除重复的行

java - 什么是能够理解数据类型并可以在 Java 中实现的脚本语言?