假设我的硬盘上有扩展名为.md
.
我想将所有这些文件转换为.html
throughfind
和-exec
选项。
将 Markdown 文件转换为 html 的命令是
markdown readme.md > readme.html
我正在尝试使用类似的东西:
find / -name "*.md" -type f -exec markdown {} > {}.html \;
当然,上面的方法是行不通的。那么,我该如何仅使用find
和来做到这一点exec
?
答案1
您需要在包含的构造周围加上引号,>
因为它是 shell 特殊字符,如下所示:
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"' {} \;
答案2
准确实现您所编写内容的方法是使用markdown
's-o
选项,该选项指定输出文件的名称,即
find / -name "*.md" -type f -exec markdown -o {}.html {} \;
这样做可以避免仅仅为了运行 markdown 而启动一个新的 shell。
不幸的是,正如 Bernhard 指出的那样,这样做会为您提供名为file.md.html
而不是 的文件file.html
,因此rush 的方法在这里更合适。