summaryrefslogtreecommitdiff
path: root/src/shblg.sh
blob: 8637bcd575a5cdacc8ce9ebaced73849cef1e4e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/sh

INPUT_DIR=blog
OUTPUT_DIR=dist

usage () {
    printf "%s\n" "Usage: shblg [-i input_dir] [-o output_dir]"
    exit 1
}

while getopts ":o:i:h" opt; do
    case "$opt" in
        o)
            OUTPUT_DIR=$OPTARG/
            mkdir -p $OUTPUT_DIR
            OUTPUT_DIR=$(realpath $OUTPUT_DIR)
            ;;
        i)
            INPUT_DIR=$(realpath $OPTARG)
            ;;
        h)
            usage
            ;;
    esac
done

# process a file to 
process () {
    path="${1#$INPUT_DIR}"
    dirpath="${1%${1##*/}}"
    out_file="${OUTPUT_DIR}${path}"

    printf "%s ...\n" "$path"

    [ -d "$1" ] && {
        mkdir -p "$out_file"
        for f in "$1"/*; do
            process "$f"
        done 
        return 0
    } || [ -x "$1" ] && {
        # execute the file
        cd $dirpath
        "$1" > "${out_file}"
        cd -
        return 0
    } || {
        # just copy the file as is
        cp "$1" "$out_file"
        return 0
    }
}

process "$INPUT_DIR"