我正在寻找一个bash脚本,它将以递归方式查找目录中的所有.less
文件,并使用{在父.css
目录中创建一个具有相同名称的css
文件{1}}。在视觉上它看起来像这样。
在:
lessc
后:
/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
。每this question我可以看到lessc
的结果如何传递到find
,但同样的方法对我cat
无效。
总的来说,我只是把这些碎片放在一起很麻烦。任何帮助,将不胜感激。
感谢。
修改
这对我有用。谢谢@ghoti!
lessc
答案 0 :(得分:6)
你已经拥有了所有的成分。你只需要食谱。 : - )
并且有多种食谱。
通常,您可以使用find
的{{1}}选项根据找到的内容执行操作。但是,你所能命名的东西是有限的。例如,如果你要使用它:
-exec
你将在运行find的父目录的css目录中创建文件,文件将被命名为a.less.css,b.less.css等等。这不好。你需要将find . -name \*.less -exec lessc {} ../css/{}.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]$
替换为lessc
,因为我的工作站上没有安装较少的。{/ p>
请注意,这只适用于您的示例中的简单文件名。如果您有空格或可能有其他“特殊”字符,它将会中断。
答案 1 :(得分:1)
使用for循环
for file in $(find . -name *.less)
do
css="${file//less/css}"
mkdir -p $(dirname "$css")
lessc "$file" > "$css"
done
答案 2 :(得分:0)
如果您的.css文件位于D:\demo
文件夹中,请创建一个文件convert.bat
,其中包含:
$ d:
$ cd demo
$ lessc style.less style.css
运行此文件时,它将.less转换为.css。