在文件名末尾插入字符(扩展名前)?

时间:2013-06-13 18:50:01

标签: ruby regex string

我有图像文件,我想在扩展名之前将字符串附加到文件名。

示例:example.png会转入example-2x.png

所以,我想在扩展名之前插入-2x,可能只是任何图像类型(png,jpg,gif等)。

如果有一种简单的方法可以用Ruby做到这一点,那很好。

9 个答案:

答案 0 :(得分:9)

Rake有一个很好的string extension来操纵路径:

require 'rake/pathmap'

"images/example.png".pathmap "%X-2x%x"
#=> "images/example-2x.png"

来自pathmap的文档:

  
      
  • %X - 所有文件扩展名。
  •   
  • %x - 路径的文件扩展名。如果没有扩展名,则为空字符串。
  •   

答案 1 :(得分:2)

这似乎有效

img[/(\.\w+)/] = "-2x#{$1}"


img1 = 'foo.png'
img1[/(\.\w+)/] = "-2x#{$1}"
img1 #=> "foo-2x.png"


img2 = 'foo.bar.jpg'
img2[/(\.\w+)/] = "-2x#{$1}"
img2 #=> "foo-2x.png.jpg"

答案 2 :(得分:1)

答案 3 :(得分:1)

def insert_before_last_dot(str, part)
  idx = str.rindex('.')
  return str if (idx.nil? || idx==0)
  str.clone.tap { |x| x[idx] = part.to_s + '.' }
end

insert_before_last_dot('foo.jpg', '-2px') # => "foo-2px.jpg"
insert_before_last_dot('foo.bar.jpg', '-2px') # => "foo.bar-2px.jpg"
insert_before_last_dot('foo') # => "foo"

答案 4 :(得分:1)

在这里,我最终做的事情似乎在几乎任何文件类型中都能很好地工作。

image = 'example.png'
ext = File.extname(image)
image_2x = image.gsub(ext, "-2x"+ext)

答案 5 :(得分:0)

我自己也不认识ruby,但我希望java中有某种类似string.lastIndexOf()的东西。所以你基本上只找到最后一个点,将字符串分开,然后用-2x

重新调整它。

答案 6 :(得分:0)

如果您在Linux环境中工作,rename功能应该可以正常工作。

rename {,\-2x,*}.png

在tcsh和bash shell中,这会扩展为rename .png \-2x.png *.png

答案 7 :(得分:0)

> "example.png".gsub /\.[^\.]*$/, "-2x\\0"
=> "example-2x.png" 

答案 8 :(得分:0)

我确信上述所有答案都比我的答案更正确,但是我发现使用替换功能非常有效...

Dir | Rename-Item -NewName {$ _。name -replace“ .pdf”,“-2012.pdf”}

因此,您只需将文件扩展名.png替换为-2x.png

这可以与任何文件扩展名一起使用,因为您只需将其替换为相同甚至不同的文件扩展名,并在文件扩展名之前添加所需的任何文本即可。