summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-04-18 03:27:11 -0300
committerEuAndreh <eu@euandre.org>2025-04-18 03:34:32 -0300
commitb5518dee210446548aa9e310d7b198652317533d (patch)
treea701657fe344670fbe4d996217644ae9f747c462
parentsrc/indexbody: Add link to Atom feed.xml and to categories page (diff)
downloadmkwb-b5518dee210446548aa9e310d7b198652317533d.tar.gz
mkwb-b5518dee210446548aa9e310d7b198652317533d.tar.xz
src/symlinks: Add working version
-rw-r--r--deps.mk1
-rwxr-xr-xsrc/symlinks45
2 files changed, 46 insertions, 0 deletions
diff --git a/deps.mk b/deps.mk
index 73c8e1b..49c90a3 100644
--- a/deps.mk
+++ b/deps.mk
@@ -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