Html to Markdown in Cli

어제 Hugo로 이사로 이사를 마무리하면서 못했던 작업을 하나 진행한게 있습니다. 바로 기존 jekyll 부터 유지해오던 blogger로 부터 넘어온 잔해, html 포스트들인데요. 물론 페이지 랜딩에는 전혀 지장이 없지만, html 파일 자체가 유지보수가 어렵다보니 글을 수정하기 까다롭다는 단점이 있었습니다.

이참에 다수의 html 파일을 markdown으로 변환하고 저장한 방법에 대해 기록으로 남겨둘까 합니다. (참고로 html 포스트만 600개가 넘었습니다..)

TL;DR

ls | grep "\.html" | xargs -I % sh -c "~/tools/h2m/bin/h2m-cli.js -f % -m extra > %.markdown"
rename 's/.html.markdown/.markdown' *.html.markdown

H2M

우선 html to markdown 도구와 라이브러리를 좀 찾아봤습니다. npm 패키지에 h2m이라는 괜찮은 도구가 있어서 테스트해봤고 특별한 문제없이 잘 변환하는 것 같아 해당 도구를 사용하기로 했습니다.

npm install h2m

단 제가 사용하던 markdown은 extra mode(img, fenced code block 등)가 필요한 부분이였고 라이브러리단에서 지원하지만 CLI에서 지원하지 않고 있었습니다. 그래서 고민하던 찰나 Issue 탭에서 재미난걸 발견했습니다.

https://github.com/island205/h2m/issues/17

저랑 같은 고민을 한 분이 있었고, PR을 하진 않았지만 Issue로 수정된 repo를 올려뒀더군요. 그래서 저는 해당 repo로 빌드 후 사용하였습니다.

git clone https://github.com/ThinCats/h2m ; cd h2m
npm build .
./bin/h2m-cli.js

Usage: h2m-cli [options]

Options:
  -V, --version      output the version number
  -f, --file <file>  HTML file path or an url adress (default: "")
  -c, --clipboard    read HTML from clipboard
  -m, --mode <mode>  specify converter mode: common/extra (default: "common")
  -h, --help         output usage information

Automation

이젠 뭐 별거 없습니다. ls로 리스트를 읽어서 .html 파일만 걸러낸 후 h2m을 통해 .markdown 확장자를 붙여 변환해주면 됩니다.

ls | grep "\.html" | xargs -I % sh -c "~/tools/h2m/bin/h2m-cli.js -f % -m extra > %.markdown"

다만 이렇게 하면 결과 파일이 123.html.markdown 과 같은 형태로 나오는데요. 이는 rename command를 이용하면 쉽게 치환할 수 있습니다.

rename 's/.html.markdown/.markdown' *.html.markdown

vim에서 치환하는 포맷과 동일하니 참고해서 파일 변환해주시면 됩니다. 여기까지 하면 .html 파일이 .markdown 파일로 바뀌었습니다 :D