Cześć

Jeśli ktoś prowadzi bloga w oparciu o generator stron Jekyll, to może przyda mu się taki skrypt.

Jak to działa?

Wystarczy wpisać:

$ ./create_post.sh -t "Tutaj podaj tytuł posta"

W katalogu _posts pojawi się plik z nagłówkiem YAML dla generatora. Skrypt sam wstawi dzisiejszą datę oraz wygeneruje tzw. "slug".

Dostępne są jeszcze dwa opcjonalne parametry:

-d           Tworzy plik w katalogu _drafts
-c <nazwa>   Dodaje kategorię do nagłówka

Konstruktywna krytyka mile widziana. A może ktoś ma pomysł na rozbudowę?

Kod:

#!/bin/bash

DATE=$(date '+%Y-%m-%d')
DIR="./_posts/"
DRAFT_DIR="./_drafts/"

for arg in "$@"; do
    case $arg in
        -t|--title)
            # Post title
            TITLE="$2"
            shift
        ;;

        -c|--category)
            # Post category (optional)
            CATEGORY="$2"
            shift
        ;;

        -d|--draft)
            # Post is a draft
            DIR=$DRAFT_DIR
            shift
        ;;

        *)
            # Unrecognized parameter (skip)
            shift
        ;;
    esac
done

if [ "$TITLE" ]; then
    # Create the directory if not exsts
    if [ ! -d $DIR ]; then
        mkdir $DIR
    fi

    # Prepare the slug
    SLUG=$TITLE
    SLUG="$(echo -n "$SLUG" | sed -e 's/[^[:alnum:]]/-/g')"
    SLUG="$(echo -n "$SLUG" | tr -s '-')"
    SLUG="$(echo -n "$SLUG" | tr A-Z a-z)"
    SLUG="$(echo -n "$SLUG" | sed -e 's/^[\-]*//' -e 's/[\-]*$//')"

    # Prepare the file name
    FILE="${DIR}${DATE}-${SLUG}.md"

    # Check if file exists
    if [ ! -f "$FILE" ]; then
        echo "File: $FILE"
        echo "---" >> $FILE
        echo "title: $TITLE" >> $FILE
        [ "$CATEGORY" ] && echo "category: $CATEGORY" >> $FILE
        echo "date: $DATE" >> $FILE
        echo "---" >> $FILE
        echo "" >> $FILE
    else
        echo "File \"$FILE\" alredy exists!"
        echo "Try a different title."
    fi
else
    echo "The title is required!"
    echo "Usage:"
    echo "    $0 -t title"
    echo "Optional parameters:"
    echo "    -c <category name>        Category"
    echo "    -d                        Draft"
fi