ruby-inotify 意外的波形符 ~ 添加到一些报告的文件名中

问题描述 投票:0回答:1

我有一个 ruby 脚本,它运行等待扫描的 pdf 文档上传到路径,然后进行一些额外的处理和通知。扫描仪是佳能 ImageRunner 扫描仪,使用扫描到 ftp 路径,服务器运行

vsftpd
,配置非常简单。

require 'rb-inotify'

notifier = INotify::Notifier.new
notifier.watch("/root/test", :close_write) do |event|
    p event.absolute_name
    p event.name
end

notifier.run

通常一切都会按预期进行,我们会按预期返回文件名和完整路径。

"/root/test/doc1.pdf"
"doc1.pdf"
"/root/test/doc2.pdf"
"doc2.pdf"

但是我们有一个新的扫描仪设备,当我们从该机器扫描文档时,会报告初始文件名,并在名称末尾附加一个额外的

~
(波形符)(这会破坏处理脚本中其他地方的许多内容) )

"/root/test/doc1.pdf~"
"doc1.pdf~"
"/root/test/doc2.pdf~"
"doc2.pdf~"

但是当我检查实际文件夹时,文件以正确的名称存储,并且没有

~

我猜这是新扫描仪实际将文件写入服务器的方式的一些奇怪问题。

作为一个非常快速和肮脏的黑客,我做了一个测试,从表面上有效的路径中删除了尾随的

~
[0...-1]
,但后来在更大的处理脚本中破坏了其他东西。

解决此问题最安全的方法是什么,以便我只能得到正确的文件名报告? (仅删除最后一个字符是不切实际的,因为手动上传以及可能使用的其他扫描仪都会返回正确的文件名,并且在我的肮脏黑客中最终会变成

doc1.pd

ruby inotify
1个回答
0
投票

怀疑这是较新的扫描仪硬件的一些假象,较旧的设备和用于测试的 MFD 没有此问题。

基于 engineersmnky 评论,我最终得到以下结果;

notifier.watch("/root/test/", :close_write) do |event|

    file_path = event.absolute_name[/(.*[^~])/]
    file_name = event.name[/(.*[^~])/]
    
    puts "#{file_path} is now uploaded"
    
    sleep(1)

    copy_file(file_path, file_name)
end

[/(.*[^~])/]
从文件名中删除错误的
~
,并且
sleep(1)
足以让文件系统跟上并且脚本的其余部分按预期运行。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.