2017-08-31 10 views
0

に「不明なファイルの種類」を取得すると、ここに私のコードです:はルビー

> !#usr/bin/ruby 

require 'fileutils' 

Dir.chdir "/home/john/Documents" 

if (Dir.exist?("Photoshoot") === false) then 
    Dir.mkdir "Photoshoot" 
    puts "Directory: 'Photoshoot' created" 
end 

Dir.chdir "/run/user/1000/gvfs" 

camdirs = Dir.glob('*') 
numcams = camdirs.length 
camnum = 0 
campath = [] 

while camnum < numcams do 
    campath.push("/run/user/1000/gvfs/#{camdirs[camnum]}/DCIM") 
    puts campath[camnum] 

    camnum += 1 
end 

campath.each do |path| 
    Dir.chdir (path) 
    foldnum = 0 
    foldir = Dir.glob('*') 
    puts foldir 
    Dir.entries("#{path}/#{foldir[foldnum]}").each do |filename| 
     filetype = File.extname(filename) 
     if filetype == ".JPG" 
      FileUtils.mv("#{path}/#{foldir[foldnum]}/#{filename}", "/home/john/Documents/Photoshoot") 
     end 
     foldnum += 1 
    end 


end 
puts "#{numcams} cameras detected" 

私はちょうど私が接続されている一部のカメラに行くと、ファイルにすべての画像を抽出しようとしているが、そのは私に、このエラーを与えます。私を混乱させる原因の1つは、画像がDCIMのサブフォルダに保存されていることです。私はちょうど.entriesを使うと、画像だけでなく画像もフォルダに入れられます。

/usr/lib/ruby/2.3.0/fileutils.rb:1387:in `copy': unknown file type: /run/user/1000/gvfs/gphoto2:host=%5Busb%3A002%2C021%5D/DCIM//IMG_0092.JPG (RuntimeError) 
    from /usr/lib/ruby/2.3.0/fileutils.rb:472:in `block in copy_entry' 
    from /usr/lib/ruby/2.3.0/fileutils.rb:1498:in `wrap_traverse' 
    from /usr/lib/ruby/2.3.0/fileutils.rb:469:in `copy_entry' 
    from /usr/lib/ruby/2.3.0/fileutils.rb:530:in `rescue in block in mv' 
    from /usr/lib/ruby/2.3.0/fileutils.rb:527:in `block in mv' 
    from /usr/lib/ruby/2.3.0/fileutils.rb:1571:in `block in fu_each_src_dest' 
    from /usr/lib/ruby/2.3.0/fileutils.rb:1585:in `fu_each_src_dest0' 
    from /usr/lib/ruby/2.3.0/fileutils.rb:1569:in `fu_each_src_dest' 
    from /usr/lib/ruby/2.3.0/fileutils.rb:517:in `mv' 
    from /home/john/Desktop/TestExtract.rb:34:in `block (2 levels) in <main>' 
    from /home/john/Desktop/TestExtract.rb:31:in `each' 
    from /home/john/Desktop/TestExtract.rb:31:in `block in <main>' 
    from /home/john/Desktop/TestExtract.rb:26:in `each' 
    from /home/john/Desktop/TestExtract.rb:26:in `<main>' 
/run/user/1000/gvfs/gphoto2:host=%5Busb%3A002%2C022%5D/DCIM 
/run/user/1000/gvfs/gphoto2:host=%5Busb%3A002%2C021%5D/DCIM 
/run/user/1000/gvfs/gphoto2:host=%5Busb%3A002%2C020%5D/DCIM 
104___03 
105___04 
106___05 
102___01 
[Finished in 0.1s with exit code 1] 
[shell_cmd: ruby "/home/john/Desktop/TestExtract.rb"] 
[dir: /home/john/Desktop] 
[path: /home/john/bin:/home/john/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin] 

アドバイスはありますか?何が間違っているのか分かりません。

答えて

0

ファイルへのパスが奇妙に見える理由は、カメラのストレージがFUSEを使用してマウントされているためです。非常によく見ると、探していることがわかります:

/run/user/1000/gvfs/gphoto2:host=%5Busb%3A002%2C021%5D/DCIM//IMG_0092.JPG 

最後のファイル名の前に2つのスラッシュがあります。アプリの34行目でこれを修正してみてください。

Rubyで操作を実行しているユーザーにそのファイルシステムに対するアクセス権がないか、またはFUSEによってパスが構築された方法がRuby FileUtilsと互換性がない可能性があります。

あなたは実行しようとすることができます

cat /run/user/1000/gvfs/gphoto2:host=%5Busb%3A002%2C021%5D/DCIM/IMG_0092.JPG 

あなたはファイルシステムへのアクセス権を読んだことを確認するためのRubyプロセスを実行しているのと同じユーザーとして。

+0

私は34行目に余分なスラッシュを取り出しましたが、それでもエラーが表示されています。コンソールであなたのcatコマンドを実行すると、「そのようなファイルやディレクトリはありません」と表示されます。 –

+0

それは問題です。ファイルシステムのオーバーレイを使用してカメラと通信していますが、これらのパスは標準ツールでは使用できません。あなたは[値を変換する](https://stackoverflow.com/questions/9966053/what-does-5b-and-5d-in-post-requests-stand-for)を実際の文字列に変換し、あなたはそのパスにアクセスできますが、私はそれがうまくいくのか疑問です。 – anothermh