abc.txt
的这种会 File.basename(file,File.extname(file))
abc.tar.gz
文件名 abc
abc.v1.tar.gz
文件名 abc.v1
后面两种怎么取正确啊?
只要有个表可以 match 出 extension filename,然后在源文件名基础上移除匹配到的 ext name,就可以了。应该有一些 gem 是可以通过文件的 ext name 来判断文件的 mimetype 的,楼主可以从这个地方入手看能不能抽离出一套文件扩展名总表。
a = %w{ tar gz txt }
def basename(file_name, arr)
names = file_name.split('.')
name = File.basename(names.shift)
ts = names.select { |x| not arr.include? x }
ts.empty? ? name : name + '.' + ts.join('.')
end
puts basename('abc.tar.gz', a)
puts basename('abc.v1.tar.gz', a)
代码应该可以再简洁的
另一个版本
a = %w{ .tar .gz .txt }
def basename(file_name, arr)
file_name = File.basename file_name
while(true)
name = file_name.scan(/\.\w+$/).first
arr.include?(name) ? file_name.gsub!(name, '') : break
end
file_name
end
puts basename('/User/abc.tar.gz', a)
puts basename('abc.v1.tar.gz', a)