#!/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 chexec + "$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"