首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.less从.css文件生成.less脚本

使用.less从.css文件生成.less脚本
EN

Stack Overflow用户
提问于 2012-06-06 17:17:13
回答 3查看 1.9K关注 0票数 3

我希望编写一个bash脚本,它将递归地查找目录中的所有.less文件,并使用lessc在父css目录中创建同名的.css文件。从视觉上看是这样的。

在此之前:

代码语言:javascript
复制
/css
/less
    a.less
    b.less
/whatever
    /css
    /less
        c.less
        d.less

之后:

代码语言:javascript
复制
/css
    a.css
    b.css
/less
    a.less
    b.less
/whatever
    /css
        c.css
        d.css
    /less
        c.less
        d.less

到目前为止,我能够发现的是,我可以使用以下方法找到所有文件:

代码语言:javascript
复制
find . -name *.less

我可以使用以下方法生成单个文件:

代码语言:javascript
复制
lessc foo.less > ../css/foo.css

我的问题是试图将find的结果导入lessc。根据this question,我可以看到如何将find的结果导入cat,但是对于lessc来说,同样的方法并不适用。

一般来说,我只是很难把这些碎片拼凑在一起。任何帮助都将不胜感激。

谢谢。

编辑

这就是对我起作用的东西。谢谢@ghoti!

代码语言:javascript
复制
find . -name \*.less -print | sed -rne 's:(.*)/less/([^/]+).less$:lessc & > \1/css/\2.css:p' | sh
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-06 17:35:53

你掌握了所有的原料。你只需要菜谱。:-)

有很多种食谱。

通常,您可以使用find-exec选项来执行它发现的内容。但是,您在可以命名的东西上受到限制。例如,如果您要使用以下内容:

代码语言:javascript
复制
find . -name \*.less -exec lessc {} ../css/{}.css

您将在父目录的css目录中创建文件,这些文件将命名为a.less.css、b.less.css等,这是不好的。您需要将dirname等嵌入到命令中,然后就不可能用太多的引号和反斜杠来管理事情了。

当我不得不做模式垫和这样的变化时,我经常求助于管道。我会这样做:

代码语言:javascript
复制
find . -name \*.less -print | \
  sed -rne 's:(.*)/less/([^/]+).less$:lessc & > \1/css/\2.css:p'

正如您所期望的那样,find将获取您的文件。然后,sed脚本将它们转换为命令行。它的输出是一个lessc命令行的集合,一旦您验证了这些命令行是否正确,您就可以简单地将它们导入sh

以下是结果。

在此之前:

代码语言:javascript
复制
[ghoti@pc ~/tmp1]$ find . -type f -print
./whatever/less/c.less
./whatever/less/d.less
./less/a.less
./less/b.less
[ghoti@pc ~/tmp1]$ 

然后测试运行:

代码语言:javascript
复制
[ghoti@pc ~/tmp1]$ find . -name \*.less -print | sed -rne 's:(.*)/less/([^/]+).less$:cat & > \1/css/\2.css:p'
cat ./whatever/less/c.less > ./whatever/css/c.css
cat ./whatever/less/d.less > ./whatever/css/d.css
cat ./less/a.less > ./css/a.css
cat ./less/b.less > ./css/b.css
[ghoti@pc ~/tmp1]$ 

然后最后运行,和结果。

代码语言:javascript
复制
[ghoti@pc ~/tmp1]$ find . -name \*.less -print | sed -rne 's:(.*)/less/([^/]+).less$:cat & > \1/css/\2.css:p' | sh
[ghoti@pc ~/tmp1]$ find . -type f -print
./css/b.css
./css/a.css
./whatever/less/c.less
./whatever/less/d.less
./whatever/css/d.css
./whatever/css/c.css
./less/a.less
./less/b.less
[ghoti@pc ~/tmp1]$ 

对于我的测试,我用cat代替了cat,因为我的工作站上没有安装更少的。

请注意,这只适用于简单的文件名,如您的示例中的文件名。如果你有空格,或者可能有其他“特殊”字符,它就会破裂。

票数 6
EN

Stack Overflow用户

发布于 2012-06-06 17:27:10

使用for循环

代码语言:javascript
复制
for file in $(find . -name *.less)
do
    css="${file//less/css}"
    mkdir -p $(dirname "$css")
    lessc "$file" > "$css"
done
票数 1
EN

Stack Overflow用户

发布于 2020-02-03 08:04:25

如果.css文件位于D:\demo文件夹中,则创建包含以下内容的文件convert.bat

代码语言:javascript
复制
$ d:
$ cd demo
$ lessc style.less style.css

当您运行此文件时,它将将.less转换为.css。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10918964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档