这就是我想做的:
将 HTML 文件的文件夹转换为 Markdown,同时通过转换为 YAML 来复制每个 HTML 文件的 XML 元数据。
我做了研究并发现了以下命令:
find . -name \*.md -type f -exec pandoc -o {}.txt {} \;
- 这是在这里找到的,这是一个可以工作并使用 pandoc 的命令,但是文件扩展名是“.html.md”而不是“.md”
find / -name "*.md" -type f -exec sh -c 'markdown "${0}" > "${0%.md}.html"' {} \;
- 这是在这里找到的。这显然带走了“.html.md”并变成“.md”,但它不使用pandoc。
pandoc -f html -t markdown -s input.html -o output.md
- 这是在这里找到的。这是 pandoc 命令,它显然会复制元数据并将其转换为 YAML,但是它不适用于文件文件夹,只能在打开时使用
我需要的是一个使用 pandoc 的命令,为转换后的文件提供“.md”。扩展名而不是 .html.md,并将 XML 元数据转换为 YAML。所有这些都可以使用这三个命令来实现,只需将它们合并为一个命令即可。
答案1
你需要的是 xargs。我不熟悉 pandoc,但这样的东西应该可以工作:
$ find . -name \*.html -type f | sed 's/\.html$//' | xargs -I {} pandoc -f html -t markdown -s -o "{}.md" "{}.html"
这使用“查找”列出您选择的目录(以及任何子目录)中的所有 .html 文件。这些内容通过管道传输到 sed,后者会去除“.html”扩展名,然后通过管道传输到 xargs,xargs 将它们一一输入到 pandoc 中; pandoc(如果我正确使用了语法)然后采用每个名称(替换为 {}),使用每个 html 文件作为源并输出到与源文件位于同一目录中的带有 md 扩展名的新文件。
您最终应该在同一目录中得到原始 html 文件和相同数量的匹配 md 文件。
答案2
将 HTML 文件的文件夹转换为 Markdown,同时通过转换为 YAML 来复制每个 HTML 文件的 XML 元数据。
您可以使用它find
来驱动该过程。以下是构建命令的方法。
这会生成一组与 shell (glob) 模式匹配的文件
*.html
:find . -type f -name '*.html'
这会将 HTML 文件转换为 Markdown:
pandoc -f html -t markdown -s input.html -o output.md
我们需要重复该命令,为每个匹配的文件
pandoc
替换input.html
和。output.md
我们将使用sh
来处理文件名替换:find . -type f -name '*.html' -exec sh -c 'pandoc -f html -t markdown -s "$1" -o "${1%html}md"' _ {} \;
由于
sh
启动匹配文件的每个实例的成本相对较高,因此我们将让它同时处理多个文件:find . -type f -name '*.html' -exec sh -c 'for h in "$@"; do m="${h%html}md"; pandoc -f html -t markdown -s "$h" -o "$m"; done' _ {} +
您似乎没有提供生成 YAML 的命令,因此我没有将其包含在解决方案中。但是,如果它是与生成的 Markdown 并排的单独文件,那么在 shell 循环中插入命令将非常容易。
答案3
对于许多人来说,使用xargs
它来处理find
输出看起来并不完全理解。也许借助while read
-loop 循环遍历所有文件更容易理解?
寻找 。 -名称“*.html”-类型f |读取行时;做 pandoc“${行}”\ -f html \ -t 降价 \ -s \ -o "${line%%.html}.md" 完毕
引号还用于覆盖包含空格的文件,以防万一。的构造${line%%.html}
是“Bashism”,可能无法在其他 shell 中工作。它删除任何.html- 文件名的后缀。