2017-08-31 164 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" 

我只是想进入某些相机我已经连接并提取所有图像到一个文件,但它给我这个错误。其中一个让我烦恼的事情是,图像存储在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 

你有两个前锋的最后文件名前斜线。尝试纠正你的应用程序的第34行。

如果问题仍然存在,那么在Ruby中运行操作的用户可能没有该文件系统的权限,或者FUSE构建路径的方式与Ruby FileUtils不兼容。

你可以尝试运行:

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

相同的用户正在运行Ruby进程,以确保您已经阅读权限的文件系统。

+0

我拿出了第34行的额外斜线,但它仍然给我错误。当我在控制台中运行cat命令时,它会告诉我“Theres no such file or directory”。 –

+0

那就是问题所在。您正在使用文件系统覆盖图来与相机进行对话,并且这些路径无法通过标准工具使用。你可以尝试[转换值](https://stackoverflow.com/questions/9966053/what-does-5b-and-5d-in-post-requests-stand-for)到他们的实际字符串对应,看看是否让你访问路径,但我怀疑它会起作用。 – anothermh