瑞克任务中的多个文件基名

时间:2019-05-15 16:31:43

标签: ruby-on-rails rake-task

我有一个包含多个pdf文件的文件夹,文件名如下所示

1_abc.pdf
2_xyz.pdf
3_qwe.pdf

要做的只是获取文件名的第一部分

1
2
3

因此,我正在尝试生成一个rake任务以使该任务正常工作,但我不想弄清楚如何在多个文件上实现它。

namespace :request_document do
  desc "Expects to get a file or folder ..."
  task(:import_attachment, [:filename]) do |t, args|
    files = Dir.foreach("/Users/admin/Documents/Data/Attachments")
     puts files
      *This gives the list of all the files under the attachment folder*
  end
end

所以我正在考虑使用类似的东西

File.basename"1_abc.pdf".sub(/\_..*/, '')
=>  1

这给出了我需要的1,但是我无法弄清楚如何在多个文件上实现它。像这样循环遍历附件文件夹中的所有文件,并让我获得文件名的第一部分。请帮我弄清楚。

1 个答案:

答案 0 :(得分:1)

您可以简单地遍历文件名,例如:

Dir["/Users/admin/Documents/Data/Attachments/*"].each do |filename|
  puts File.basename(filename).sub(/\_.*/, '')
end

rake任务看起来像这样:

namespace :request_document do
  desc "Expects to get a file or folder ..."
  task(:import_attachment, [:path]) do |t, args|
    if File.directory?(args[:path])
      Dir["#{path}/*"].each do |file_path|
        puts File.basename(file_path).sub(/\_.*/, '')
      end
    else
      puts File.basename(args[:path]).sub(/\_.*/, '')
    end
  end
end