【问题标题】:Getting "Unknown file type" in ruby在 ruby​​ 中获取“未知文件类型”
【发布时间】:2017-08-31 18:06:32
【问题描述】:

这是我的代码:

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

有什么建议吗?我不知道出了什么问题。

【问题讨论】:

    标签: ruby fileutils


    【解决方案1】:

    您的文件路径看起来很奇怪的原因是您的相机存储已使用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 进程的同一用户,以确保您具有文件系统的读取权限。

    【讨论】:

    • 我在第 34 行去掉了多余的斜线,但它仍然给我错误。当我在控制台中运行你的 cat 命令时,它告诉我“没有这样的文件或目录”。
    • 那就是问题所在。您正在使用文件系统覆盖与相机对话,而标准工具无法使用这些路径。您可以尝试 converting the values 到他们实际的字符串对应项,看看是否可以让您访问路径,但我怀疑它是否会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多