Bash find:更改 -exec 中使用的匹配名称
我正在编写一个部署脚本,并且需要对目录中的所有 .less 文件运行 less 编译器。使用以下 find 命令很容易做到这一点:
find -name "*.less" -exec plessc {} {}.css \;
在包含名为 main.less
的文件的文件夹上运行此命令后,我留下了一个名为 main.less.css< 的文件/code>,但我希望它是
main.css
。
我知道我可以使用以下命令轻松删除生成文件的 .less 部分: rename 's/\.less//' *.css
但我希望学习一些有关使用的新知识 -执行。
在 -exec 参数中使用时是否可以修改匹配的文件名?
谢谢!
I'm writing a deploy script, and I need to run a less compiler against all .less files in a directory. This is easy to do with the following find command:
find -name "*.less" -exec plessc {} {}.css \;
After running this command on a folder with a file named main.less
, I'm left with a file named main.less.css
, but I want it to be main.css
.
I know I can easily strip the .less portion of the resulting files with this command: rename 's/\.less//' *.css
but I'm hoping to learn something new about using -exec.
Is it possible to modify the name of the file that matches while using it in the -exec parameter?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的 find 命令使用了几个非标准 GNU 扩展:
下面是一个单行代码,应该适用于大多数查找实现并解决双扩展问题:
在 Solaris 10 及更早版本上,如果满足以下条件,
sh -c
应替换为ksh -c
: PATH 不符合 POSIX 标准。Your find command is using a couple of non standard GNU extensions:
Here is a one liner that should work with most find implementations and fix your double extension issue:
On Solaris 10 and older,
sh -c
should be replaced byksh -c
if the PATH isn't POSIX compliant.不,不可能直接这样做。您只能使用
{}
直接插入完整文件名。但是,在 exec 中,您可以放入其他内容,例如awk
。或者您可以通过管道将输出重定向到另一个程序。从
find
man
页面:No, it is not possible to do it directly. You can only use
{}
to directly insert the full filename. However, in exec, you COULD put in other things likeawk
. Or you can redirect output to another program via pipes.From the
find
man
page: