X-Git-Url: https://mattmccutchen.net/utils/utils.git/blobdiff_plain/40ea9b7868f2b7746e7cbabfba6aba982096392a..273c390351c42303171c25215304d1cfd6ca02d4:/ftx diff --git a/ftx b/ftx new file mode 100755 index 0000000..7442776 --- /dev/null +++ b/ftx @@ -0,0 +1,50 @@ +#!/bin/bash +# ftx : file tree extract +set -e + +function skip { + read -n $1 trash +} + +function ftx_sub { + if [ -h "$1" ] || [ -a "$1" ]; then + echo "File already exists!" 1>&2 + return 1 + fi + read -n 1 type + case $type in + f|x) + skip 1 # space + read length + head -c "$length" >"$1" + if [ $type == x ]; then + setexec + "$1" + fi + skip 1 # newline + ;; + {) + skip 1 # newline + mkdir -- "$1" + ( + cd -- "$1" + while read -n 1 what && [ $what == '+' ]; do + skip 1 # space + read -d ' ' length + read -d '' -n $length name + skip 1 # space + ftx_sub "$name" + done + skip 1 # newline + ) + ;; + l) + skip 1 # space + read -d ' ' length + read -d '' -n $length target + skip 1 # newline + ln -s -- "$target" "$1" + ;; + esac +} + +ftx_sub "$1"