【发布时间】:2013-07-08 17:55:59
【问题描述】:
我想向程序传递两个参数,一个文件名和文件名的修改版本。情况是我在目录树中有一堆 .html.erb 文件,我想使用原始文件名和带有 haml 扩展名的新输出文件名对它们调用 html2haml,如下所示:
html2haml thing.html.erb thing.html.haml
这是我目前最好的尝试:
find . -name "*.html.erb" -exec echo {} `echo {} | sed "s/.erb/.haml/g"` \;
(在我完成测试后,我会将echo 替换为html2haml 并再次运行)
但是它不起作用。反引号内的表达式的结果是未修改的字符串。
以下是我尝试的一些实验,这些实验确实按预期运行(以测试我的语法和转义/引号级别是否正确):
1. echo myfile.foo | sed 's/foo/foo2/g'
2. find . -name "*.html.erb" -exec echo {} `echo xyz | sed "s/y/Y/g"` \;
3. find . -name "*.html.erb" -exec echo {} `echo {} hello` \;
4. find . -name "*.html.erb" -exec echo {} `echo {}` \;
这些都按预期运行的事实向我表明,我在语法上遇到了一些小问题,而这确实可以用单行来做到这一点。
如果这是不可能的,那可能是因为对“何时”find 在每次调用时插入其结果的误解。上面的示例 #3 向我建议,它正是在我需要/期望它时执行的(因为我成功地将每个单独的结果字符串与“hello”连接起来)。
【问题讨论】:
-
这个问题的答案已经进入这个拉取请求:github.com/haml/html2haml/pull/29 :-D