我希望编写一个bash脚本,它将递归地查找目录中的所有.less文件,并使用lessc在父css目录中创建同名的.css文件。从视觉上看是这样的。
在此之前:
/css
/less
a.less
b.less
/whatever
/css
/less
c.less
d.less之后:
/css
a.css
b.css
/less
a.less
b.less
/whatever
/css
c.css
d.css
/less
c.less
d.less到目前为止,我能够发现的是,我可以使用以下方法找到所有文件:
find . -name *.less我可以使用以下方法生成单个文件:
lessc foo.less > ../css/foo.css我的问题是试图将find的结果导入lessc。根据this question,我可以看到如何将find的结果导入cat,但是对于lessc来说,同样的方法并不适用。
一般来说,我只是很难把这些碎片拼凑在一起。任何帮助都将不胜感激。
谢谢。
编辑
这就是对我起作用的东西。谢谢@ghoti!
find . -name \*.less -print | sed -rne 's:(.*)/less/([^/]+).less$:lessc & > \1/css/\2.css:p' | sh发布于 2012-06-06 17:35:53
你掌握了所有的原料。你只需要菜谱。:-)
有很多种食谱。
通常,您可以使用find的-exec选项来执行它发现的内容。但是,您在可以命名的东西上受到限制。例如,如果您要使用以下内容:
find . -name \*.less -exec lessc {} ../css/{}.css您将在父目录的css目录中创建文件,这些文件将命名为a.less.css、b.less.css等,这是不好的。您需要将dirname等嵌入到命令中,然后就不可能用太多的引号和反斜杠来管理事情了。
当我不得不做模式垫和这样的变化时,我经常求助于管道。我会这样做:
find . -name \*.less -print | \
sed -rne 's:(.*)/less/([^/]+).less$:lessc & > \1/css/\2.css:p'正如您所期望的那样,find将获取您的文件。然后,sed脚本将它们转换为命令行。它的输出是一个lessc命令行的集合,一旦您验证了这些命令行是否正确,您就可以简单地将它们导入sh。
以下是结果。
在此之前:
[ghoti@pc ~/tmp1]$ find . -type f -print
./whatever/less/c.less
./whatever/less/d.less
./less/a.less
./less/b.less
[ghoti@pc ~/tmp1]$ 然后测试运行:
[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]$ 然后最后运行,和结果。
[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,因为我的工作站上没有安装更少的。
请注意,这只适用于简单的文件名,如您的示例中的文件名。如果你有空格,或者可能有其他“特殊”字符,它就会破裂。
发布于 2012-06-06 17:27:10
使用for循环
for file in $(find . -name *.less)
do
css="${file//less/css}"
mkdir -p $(dirname "$css")
lessc "$file" > "$css"
done发布于 2020-02-03 08:04:25
如果.css文件位于D:\demo文件夹中,则创建包含以下内容的文件convert.bat:
$ d:
$ cd demo
$ lessc style.less style.css当您运行此文件时,它将将.less转换为.css。
https://stackoverflow.com/questions/10918964
复制相似问题