【问题标题】:find certain files using glob pattern使用 glob 模式查找某些文件
【发布时间】:2014-01-15 15:27:48
【问题描述】:

我使用logstash 不断寻找新文件并将数据流式传输到不同的系统。

现在我正在使用这个配置:

input {

  file {
    type => "source"
    path => "/ebs/**/*-*csv"  # recursivly check subfolders
    sincedb_path => "/usr/local/logstash/sincedb"
    sincedb_write_interval => 1
    discover_interval => 4
    start_position => "beginning"
    stat_interval => 1
  }
}

它工作正常,但我想做的是这样的:

path => "/ebs/**/*-[0-9]{10}.csv" 

是否可以在路径中包含这样的正则表达式?

【问题讨论】:

    标签: ruby regex path glob logstash


    【解决方案1】:

    Logstash File 输入 api 仅支持 glob(Wildcard),因为 Unix shell 支持。例如,如果您使用 glob 模式列出 Unix 系统中的文件,

    $ ls [0-9].csv

    可以显示文件“1.csv”

    但是当你添加正则表达式时,

    $ ls [0-9]{1}.csv

    系统显示

    ls: [0-9]{1}.csv: 没有这样的文件或目录

    所以,如果要添加正则表达式,可能需要匹配globbing pattern。 比如

    路径 => "/ebs/*/*-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][ 0-9][0-9][0-9].csv"

    希望这可以帮助你。

    【讨论】:

      【解决方案2】:

      您可以使用Rake::FileList,它非常适合工作:

      require rake
      FileList.new("/ebs/**/*-[0-9]{10}.csv")
      

      应该为你做这项工作

      【讨论】:

      • 这是有道理的。但为此,我假设我需要修改源代码并重新编译代码。在我的情况下,这不是一个真正的选择。我正在寻找一些特定于 logstash 的解决方案。
      • 抱歉信息不足。 logstash 写在JRuby
      • @Vor 今天晚些时候我会查看源代码,看看是否可以提交补丁
      • @Vor 不确定项目中到底使用了什么,今天在 IRC 上检查过,但如果是 Dir.glob,那么我认为它与 Rake::FileList 有类似的行为,你可以试试你的模式,看看它是否没有给出问题,如果有,那么你可以继续 irc #logstash 或发表评论,我会看看
      • 感谢您的帮助,不幸的是,此正则表达式在 logstash 中不起作用。试过了,来自另一个答案的建议,它有效。
      猜你喜欢
      • 2021-08-08
      • 1970-01-01
      • 2013-06-18
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      相关资源
      最近更新 更多