migrate.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/bin/sh
  2. PAGE_PATH="content/pages"
  3. ARTICLE_PATH="content/posts"
  4. IMAGE_PATH="content/images"
  5. FILE_PATH="content/files"
  6. IMAGE_URL="/images/"
  7. FILE_URL="/files/"
  8. # Set to "1" if all files should be converted.
  9. # Otherwise only files containing image links are converted.
  10. CONVERT_ALL_FILES=0
  11. MKDIR="mkdir -p"
  12. MV="git mv"
  13. SED="sed"
  14. ## All modifying commands can be switched to DRY-mode by uncommenting te following lines
  15. #MKDIR="echo mkdir -p"
  16. #MV="echo git mv"
  17. #SED="echo sed"
  18. rename_markdown_files() {
  19. for md_file in $PAGE_PATH/*.md $ARTICLE_PATH/*.md
  20. do
  21. [ -e "$md_file" ] || continue
  22. tb_file="${md_file/.md/.textbundle}"
  23. grep -qE '\!\[.*\]\([^ \)]*' "$md_file" /dev/null
  24. if [ $? == 0 -o $CONVERT_ALL_FILES ]
  25. then
  26. echo "Convert '$md_file'"
  27. $MKDIR "$tb_file/assets"
  28. $MV "$md_file" "$tb_file/text.md"
  29. else
  30. echo "Skip '$md_file', because it doesn't contain image links."
  31. fi
  32. done
  33. }
  34. create_metadata() {
  35. for tb_file in $PAGE_PATH/*.textbundle $ARTICLE_PATH/*.textbundle
  36. do
  37. test -e "$tb_file/info.json" || cat > "$tb_file/info.json" <<INFOJSON
  38. {
  39. "version": 1,
  40. "transient": false,
  41. "creatorURL": "http://getpelican.com/",
  42. "creatorIdentifier": "https://github.com/DirkR/pelican-textbundle"
  43. }
  44. INFOJSON
  45. done
  46. }
  47. move_assets() {
  48. echo '# Apache Rewrite rules for moved assets' > assets_htaccess_fragment.txt
  49. for tb_file in $PAGE_PATH/*.textbundle $ARTICLE_PATH/*.textbundle
  50. do
  51. md_file="$tb_file/text.md"
  52. [ -e "$md_file" ] || continue
  53. for asset in $(perl -n -e '/\[.*\]\((\/[^ \)]*)/ && print "$1\n"' "$md_file")
  54. do
  55. if [ -z "${asset##*$IMAGE_URL*}" -o -z "${asset##*$FILE_URL*}" ]
  56. then
  57. rel_path=$(echo $asset | $SED -e "s!^($IMAGE_URL|$FILE_URL)!!")
  58. asset_name=$(basename $asset)
  59. [ -d "$tb_file/assets" ] || MKDIR "$tb_file/assets"
  60. $MV "content$asset" "$tb_file/assets/$asset_name"
  61. slug=$(perl -n -e '/slug\s*:\s*(.+)/ && print $1' "$tb_file/text.md")
  62. if [ ! -z "$slug" ]
  63. then
  64. echo "RewriteRule ^$asset /post/$slug/assets/$asset_name [R=301,L]" >> assets_htaccess_fragment.txt
  65. fi
  66. $SED -i.bak -e "s|$asset|assets/$asset_name|g" "$md_file"
  67. fi
  68. done
  69. done
  70. }
  71. rename_markdown_files
  72. create_metadata
  73. move_assets