--- /dev/null
+#!/bin/bash
+# ftx <file>: 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"