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