如何使用Ruby获取一个文件夹中的所有文件名?

问题描述

| 这些位于文件夹中:
This_is_a_very_good_movie-y08iPnx_ktA.mp4
myMovie2-lKESbDzUwUg.mp4
his_is_another_movie-lKESbDzUwUg.mp4
如何通过给出最后一部分
y08iPnx_ktA
文件提取字符串
mymovie1
的第一部分?就像是:
get_first_part(\"y08iPnx_kTA\") #=> \"This_is_a_very_good_movie\"
    

解决方法

        将问题分为几部分。方法“ 4”应类似于: 使用目录获取文件列表。 遍历每个文件,然后; 提取\“名称\”(\'This_is_a_very_good_movie \')和\“标签\”(\'y08iPnx_ktA \')。每个文件应使用相同的正则表达式。 如果\“ tag \”与要查找的内容匹配,则返回\“ name \”。 快乐的编码。 在REPL中玩耍,尽情享受:-)     ,        
def get_first_part(path,suffix)
  Dir.entries(path).find do |fname|
    File.basename(fname,File.extname(fname)).end_with?(suffix)
  end.split(suffix).first
end
@Steve Wilhelm回答的种类有所扩展-除非不使用glob(仅使用文件名时不需要),避免使用Regexp并在
File.basename
调用中使用ѭ6so不必包含文件扩展名。还返回字符串\“ This_is_a_very_good_movie \”,而不是文件数组。 如果找不到文件,这当然会提高..在这种情况下,如果找不到匹配项,您只想返回
nil
def get_first_part(path,suffix)
  file = Dir.entries(path).find do |fname|
    File.basename(fname,File.extname(fname)).end_with?(suffix)
  end
  file.split(suffix).first if file
end
    ,        可以做得比这更清洁吗?根据@Tin Man的建议进行了修订
def get_first_part(path,suffix)
  Dir.glob(path + \"*\" + suffix + \"*\").map { |x| File.basename(x).gsub(Regexp.new(\"#{suffix}\\.*$\"),\'\') } 
end

puts get_first_part(\"/path/to/files/\",\"-y08iPnx_kTA\")
    ,        如果文件名只有一个连字符:
path = \'/Users/greg/Desktop/test\'
target = \'rb\'

def get_files(path,target)
  Dir.chdir(path) do
    return Dir[\"*#{ target }*\"].map{ |f| f.split(\'-\').first }
  end
end

puts get_files(path,\'y08iPnx_ktA\')
# >> This_is_a_very_good_movie
如果有多个连字符:
def get_files(path,target)
  Dir.chdir(path) do
    return Dir[\"*#{ target }*\"].map{ |f| f.split(target).first.chop }
  end
end

puts get_files(path,\'y08iPnx_ktA\')
# >> This_is_a_very_good_movie
如果假定代码从包含文件的目录内部运行,则可以删除“ 13”,从而简化为:
puts Dir[\"*#{ target }*\"].map{ |f| f.split(\'-\').first }
# >> This_is_a_very_good_movie
要么
puts Dir[\"*#{ target }*\"].map{ |f| f.split(target).first.chop }
# >> This_is_a_very_good_movie