summaryrefslogtreecommitdiff
path: root/scripts/uz
blob: 35941307d3e0b9adc0fb5140bc3b95740c381ea0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/sh
# Copyright 1994,2002 David C. Niemi.
# Copyright 1996,1997,2001-2003,2010 Alain Knaff.
# This file is part of mtools.
#
# Mtools is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Mtools is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Mtools.  If not, see <http://www.gnu.org/licenses/>.
# uz [file...]
# lz [file...]
#
# If called "uz", gunzips and extracts a gzip'd tar'd archive.
# If called "lz", gunzips and shows a listing of a gzip'd tar'd archive.
#
# Requires: gzip and tar in the user's path.  Should work with most tars.
# "-" is now used for backwards compatibility with antique tars, e.g. SCO.
#
# 1994/02/19	DCN	Created (as a trivial, but useful script)
# 1994/12/01	DCN	Combined uz and lz, added suffix handling
# 2002/09/11	DCN	Added bzip2 support
# 2010/10/16	AKN	Added lzip support
#
# Copyright (C) 1994, 2002 David C. Niemi (niemi at tuxers dot net)
# The author requires that any copies or derived works include this
# copyright notice; no other restrictions are placed on its use.
#

set -e
set -u

## Default unzipping command
uzcmd='gzip -cd'

case $0 in
*uz)
	tarparam="-pxvf"
	action="Extracting from "
	;;
*lz)
	tarparam="-tvf"
	action="Reading directory of "
	;;
*)
	echo "$0: expect to be named either \"uz\" or \"lz\"." >&2
	exit 1
	;;
esac

if [ $# = 0 ]; then
	echo "$action standard input." >&2
	$uzcmd - | tar "$tarparam" -
	exit 0
fi

while [ $# -ge 1 ]; do
	echo >&2
	found=

	for suffix in "" .gz .tgz .tar.gz .z .tar.z .taz .tpz .Z .tar.Z .tar.bz2 tar.lz ; do
		if [ -r "${1}$suffix" ]; then
			found=$1$suffix
			break
		fi
	done

	case $found in
		*.tar.bz2 | *.tb2)
			uzcmd='bzip2 -cd'
			;;
		*.tar.lz)
			uzcmd='lzip -cd'
			;;
	esac
	if [ -z "$found" ]; then
		echo "$0: could not read \"$1\"." >&2
	else
		echo "$action \"$found\"." >&2
		$uzcmd -- "$found" | tar "$tarparam" -
	fi
	shift
done

exit 0