使用脚本将多个目录中的多个 Markdown 文件转换为 HTML

Posted

技术标签:

【中文标题】使用脚本将多个目录中的多个 Markdown 文件转换为 HTML【英文标题】:Converting Multiple Markdown Files in Multiple Directories into HTML with a Script 【发布时间】:2012-01-20 10:06:49 【问题描述】:

我目前有一个很大的目录,里面有很多子目录,每个子目录都有同名的markdown文件:

/big-directory/sub-directory-name-1/sub-directory-name-1.md

/big-directory/sub-directory-name-2/sub-directory-name-2.md

/big-directory/sub-directory-name-3/sub-directory-name-3.md

我想这样结束:

/big-directory/sub-directory-name-1/sub-directory-name-1.md
/big-directory/sub-directory-name-1/index.html

/big-directory/sub-directory-name-2/sub-directory-name-2.md
/big-directory/sub-directory-name-1/index.html

/big-directory/sub-directory-name-3/sub-directory-name-3.md
/big-directory/sub-directory-name-1/index.html

我正在尝试在 OS X 上编写一个 shell 脚本,它将在每个文件上运行 multimarkdown,但我很难弄清楚如何在不手动将它们全部放入脚本的情况下使循环在子目录上运行。提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

要获取/big-directory 下所有叶子目录的列表,可以使用this question 中的答案。

然后,你可以像这样构造一个while循环:

find /big-directory -type d | sort | awk '$0 !~ last print last last=$0 END print last' | while read dir
do
    # Do something useful with $dir
    echo $dir
done

这应该给你一个起点。

【讨论】:

【参考方案2】:

我遇到了同样的问题。在阅读了这个问题和其他几个问题之后,加上大量的反复试验,我想出了以下解决方案:

#!/bin/bash
for dir in `find /big-directory -type d`
do
  if [ -e $dir/file.md ]; #test if dir contains file
  then
    echo "converting $dir/file.md to HTML..."
    markdown $dir/file.md > $dir/file.html
  fi
done

我知道检查文件是否存在并不是绝对必要的,否则,脚本每次找到不包含该文件的目录时都会抛出错误。

【讨论】:

以上是关于使用脚本将多个目录中的多个 Markdown 文件转换为 HTML的主要内容,如果未能解决你的问题,请参考以下文章

将输出重定向到for循环shell中特定目录中的多个文件

如何将一行文本添加到目录中的多个文件

使用脚本/Windows 命令提示符将多个 CSV 文件转换为 UTF-8 编码

一个脚本中的多个 inotify 事件

使用 Python 重命名目录中的多个文件

在带有pdf输出的r markdown中的for循环中包含多个空行