使用find命令将markdown文件转换为html


17

假设我的硬盘上有扩展名为的文件.md

我想将所有这些文件转换为.html通过find-exec选项。

将markdown文件转换为html的命令是

markdown readme.md > readme.html

我正在尝试使用类似的东西:

find / -name "*.md" -type f -exec markdown {} > {}.html \;

当然,以上方法不起作用。那么,我该如何只使用findand来做到这一点exec


Answers:


16

您需要引用包含的构造,>因为它是壳的特殊字符,如下所示:

find / -name "*.md" -type f -exec sh -c 'markdown "$0" > "$0.html"' {} \;

这还将重命名文件,因此您最终使用foo.html而不是foo.md.html

find / -name "*.md" -type f -exec sh -c 'markdown "${0}" > "${0%.md}.html"' {} \;

您现在不获取file.md.html吗?而不是file.html?
Bernhard

@rush为什么{}两个命令都需要结尾?另外,在第二个命令中,很难理解发生了什么事?我不明白那${0%.md}/.html部分。
Abhijeet Rastogi

顺便说一句,我刚刚检查。您可能在中错误地写了正斜杠${0%.md}/.html
Abhijeet Rastogi

@shadyabhi最终值{}sh -c字符串的输入参数,可以通过进行访问$0。您不理解的命令会剥离.md并添加.html。逃脱.
Bernhard

@Bernhard感谢您的回复。老实说,我也很早就知道它正在剥离.md和添加,.html但是我想了解更多。您可以将我重定向到解释此问题的Wiki /文档吗?
Abhijeet Rastogi

0

完全实现已编写内容的方法是使用markdown-ooption,它指定输出文件的名称,即

find / -name "*.md" -type f -exec markdown -o {}.html {} \;

这样可以避免为了运行markdown而启动新的shell。

不幸的是,正如Bernhard指出的那样,这样做会给您命名为file.md.html而不是的文件file.html,因此rush的方法在这里更合适。


1
但是,markdown没有-o选择。我在发表评论之前仔细检查了一下。
Abhijeet Rastogi

markdown(1)表示可以,但是也许您使用的是其他版本?
Mikel

1
您也可以使用pandoc -f markdown -t html -o...
Mikel

哦,我使用的是daringfireball.net/projects/markdown,它还没有。
Abhijeet Rastogi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.