diff options
author | EuAndreh <eu@euandre.org> | 2025-04-18 03:27:11 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2025-04-18 03:34:32 -0300 |
commit | b5518dee210446548aa9e310d7b198652317533d (patch) | |
tree | a701657fe344670fbe4d996217644ae9f747c462 | |
parent | src/indexbody: Add link to Atom feed.xml and to categories page (diff) | |
download | mkwb-b5518dee210446548aa9e310d7b198652317533d.tar.gz mkwb-b5518dee210446548aa9e310d7b198652317533d.tar.xz |
src/symlinks: Add working version
-rw-r--r-- | deps.mk | 1 | ||||
-rwxr-xr-x | src/symlinks | 45 |
2 files changed, 46 insertions, 0 deletions
@@ -12,4 +12,5 @@ libexec.sh = \ src/links \ src/snippets \ src/sortdata \ + src/symlinks \ diff --git a/src/symlinks b/src/symlinks new file mode 100755 index 0000000..4796c9c --- /dev/null +++ b/src/symlinks @@ -0,0 +1,45 @@ +#!/bin/sh +set -euo pipefail + + +usage() { + echo 'Usage: symlinks FILENAME.txt' +} + +FILENAME="${1:-}" +eval "$(assert-arg -- "$FILENAME" 'FILENAME.txt')" + + + +filter() { + awk '$1 != "" && $2 != "" && $3 == "" && $1 != "#"' +} + +getdirs() { + awk ' + n = split($1, seg, "/") { + dir = substr($1, 1, length($1) - length(seg[n])) + print dir + }' | grep . | sort | uniq | sed 's/^/mkdir -p /' +} + +gencommands() { + awk ' + n = split($1, seg, "/") { + printf "ln -fs " + for (i = 0; i < n - 1; i++) { + printf "../" + } + printf "%s %s\n", $2, $1 + }' +} + +asignorelist() { + cut -f1 | sort | uniq | sed 's|^|/|' +} + + + +cat -- "$FILENAME" | filter | getdirs | tee /dev/stderr | sh +cat -- "$FILENAME" | filter | gencommands | tee /dev/stderr | sh +cat -- "$FILENAME" | filter | asignorelist |