1#!/bin/sh 2# 3# This should work with the GNU version of tar and gzip! 4# This should work with the bash or ash shell! 5# Requires the programs (ar, tar, gzip, and the pager more or less). 6# 7usage() { 8 cat <<EOF 9Usage: undeb -c package.deb <Print control file info> 10 undeb -l package.deb <List contents of deb package> 11 undeb -x package.deb /foo/boo <Extract deb package to this directory, 12 put . for current directory> 13EOF 14 exit 15} 16 17deb=$2 18 19exist() { 20 if [ -z "${deb}" ]; then 21 usage 22 elif [ ! -s "${deb}" ]; then 23 echo "Can't find ${deb}!" 24 exit 1 25 fi 26} 27 28if [ -z "$1" ]; then 29 usage 30elif [ "$1" = "-l" ]; then 31 exist 32 type more >/dev/null 2>&1 && pager=more 33 type less >/dev/null 2>&1 && pager=less 34 [ -z "${pager}" ] && echo "No pager found!" && exit 1 35 ( 36 ar -p "${deb}" control.tar.gz | tar -xzO *control 37 printf "\nPress enter to scroll, q to Quit!\n\n" 38 ar -p "${deb}" data.tar.gz | tar -tzv 39 ) | ${pager} 40 exit 41elif [ "$1" = "-c" ]; then 42 exist 43 ar -p "${deb}" control.tar.gz | tar -xzO *control 44 exit 45elif [ "$1" = "-x" ]; then 46 exist 47 if [ -z "$3" ]; then 48 usage 49 elif [ ! -d "$3" ]; then 50 echo "No such directory $3!" 51 exit 1 52 fi 53 ar -p "${deb}" data.tar.gz | tar -xzvpf - -C "$3" || exit 54 echo 55 echo "Extracted ${deb} to $3!" 56 exit 57else 58 usage 59fi 60