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

时间:2011-12-14 16:13:58

标签: html bash scripting markdown

我目前有一个很大的目录,里面装满了许多子目录,每个子目录都有相同名称的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,但是我很难弄清楚如何使循环遍历子目录而无需手动将它们全部放入脚本中。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

要获取/ 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

那应该给你一个起点。

答案 1 :(得分:0)

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

#!/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

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