Shell脚本:迭代文件和修改文件名

时间:2012-03-11 20:32:29

标签: bash shell

场景:我在部署期间使用一个简单的函数来缩小和压缩JS文件,如下所示:

for i in public/js/*.js; do uglifyjs --overwrite --no-copyright "$i"; done

这种方法的问题在于它缩小并覆盖原始文件。我想以某种方式介绍版本化的缩小JS和CSS 文件。

假设我有一个版本的变量:“123”。如何修改我的脚本以使用此版本编写文件?它应该使用CSS和JS文件,如下所示:

style.css -> style.123.css
script.js -> script.123.js

3 个答案:

答案 0 :(得分:2)

这样的东西?

VERSION=123; for i in public/js/*.js; do REV=${i/%.js/.${VERSION}.js}; cp "${i}" "${REV}"; uglifyjs --overwrite --no-copyright "${REV}"; done

REV=${i/%.js/.${VERSION}.js}用“.123.js”替换最后一次出现的“.js”。

答案 1 :(得分:1)

也应该在sh中工作:

VERSION=321; for i in public/js/*.js; do NEW=$(echo $i | sed s/\\./.$VERSION./) ; cp $i $NEW; uglifyjs --overwrite --no-copyright $NEW; done 

答案 2 :(得分:0)

这是一种愚蠢的做法。使用版本控制工具对源进行版本控制。

但是,当然,你是不是想要修改文件。

调用源文件foo.src.js(或其他)。 (保留最后一个后缀.js,以便编辑识别语言)。然后有一个生成foo.js的构建步骤。在开发时,您可以进行“空编译”步骤,只需将foo.src.js复制到foo.js即可。当您发布时,复制步骤将更改为执行uglifyjs而不是副本。无论哪种方式,您都不会手动编辑生成的foo.js,当然,即使它只是一个副本。您可能希望(而不仅仅是复制)在顶部“生成的文件上添加注释,不要编辑”。

具体细节取决于您。只要在加载时引用正确的名称,就可以foo.js为原始源文件的名称,foo.u.js为uglified。