2011-07-15 13 views
2

私は何時間もこれを見つめていましたが、何が間違っているのか分かりません。私は、外部リストのさまざまな場所から100個ほどのファイルを移動するための簡単なスクリプトを作成しようとしています。十分にシンプルでなければならず、irbを介してコマンドを実行すると、すべて1つのファイルで動作しますが、スクリプトを実行するとエラーが発生します。ここに私のスクリプトです。Ruby FileUtilsを使用したランタイムエラー

#! /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 

あなたが何か提案がありましたら、私は彼らを聞くのが大好きです!ありがとうございました!

答えて

3

ファイルリストにはエントリとしてAccounting PG/Accounts Payable/2011/2011_07/が含まれている可能性があります。これはファイルではなくディレクトリです。 cp_rを使用しているので、これは完全に正常に動作するはずです。

あなただけのコピーファイル(ファイルのリストを仮定すると、あまりにもサブフォルダ項目が含まれます)にそれをオーバーライドすることができます:あなたに感謝し、まず

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

!それはそのエントリを含んでいますが、私がIRBを通してそれを実行すると、ディレクトリ全体を別の場所にコピーすることができます。これは、私がやりたいことです...また、cp_rでは、 "srcがディレクトリの場合、すべての内容は再帰的に... "私は何かを理解していませんか?再度、感謝します! – counterbeing

+1

使用しているRuby 1.8の特定のバージョンはどれですか? –

+0

私はルビー1.8.7(2009-06-12パッチレベル174)[ユニバーサルダーウィン10.0] ありがとう:) – counterbeing

関連する問題