#!/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