我有图像文件,我想在扩展名之前将字符串附加到文件名。
示例:example.png
会转入example-2x.png
所以,我想在扩展名之前插入-2x
,可能只是任何图像类型(png,jpg,gif等)。
如果有一种简单的方法可以用Ruby做到这一点,那很好。
答案 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)
使用basename和extname提取所需的两个部分:
答案 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
这可以与任何文件扩展名一起使用,因为您只需将其替换为相同甚至不同的文件扩展名,并在文件扩展名之前添加所需的任何文本即可。