From b5518dee210446548aa9e310d7b198652317533d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 18 Apr 2025 03:27:11 -0300 Subject: src/symlinks: Add working version --- deps.mk | 1 + src/symlinks | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100755 src/symlinks 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 -- cgit v1.2.3