rake 任务中的多个文件基名

Multiple file basename in 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,这是我需要的,但我无法弄清楚如何在多个文件上实现它。就像它循环遍历附件文件夹中的所有文件并获取文件名的第一部分。请帮我想想办法。

您可以像这样简单地遍历文件名:

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