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

Converting Multiple Markdown Files in Multiple Directories into HTML with a Script

我现在有一个大目录,里面有许多子目录,每个目录中都有相同名称的标记文件:

1
2
3
4
5
/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

最后我想说的是:

1
2
3
4
5
6
7
8
/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

我正在尝试在OSX上编写一个shell脚本,它将在每个文件上运行多标记,但是我很难弄清楚如何让循环在子目录上运行,而不手动将它们全部放入脚本中。事先谢谢你的帮助。


要获得下面/big目录的所有叶目录的列表,可以使用此问题中的答案。

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

1
2
3
4
5
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
2
3
4
5
6
7
8
9
#!/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

我知道严格地说,不必检查文件是否存在,否则,脚本每次找到不包含此文件的目录时都会抛出一个错误。