summaryrefslogtreecommitdiff
path: root/src/symlinks
diff options
context:
space:
mode:
Diffstat (limited to 'src/symlinks')
-rwxr-xr-xsrc/symlinks45
1 files changed, 45 insertions, 0 deletions
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