141 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
set -e
 | 
						|
 | 
						|
argv0="$0"
 | 
						|
argv1="$1"
 | 
						|
argv2="$2"
 | 
						|
 | 
						|
dep() {
 | 
						|
	! command -v "$1" >/dev/null 2>&1 \
 | 
						|
		&& printf "%s: Missing dependency for this operation with type %s: %s\n" \
 | 
						|
			"$argv0" "$argv2" "$1" 1>&2 \
 | 
						|
			&& exit 1 \
 | 
						|
		|| return 0
 | 
						|
}
 | 
						|
 | 
						|
deps() {
 | 
						|
	while [ -n "$1" ]; do
 | 
						|
	# shellcheck disable=SC2015
 | 
						|
		command -v "$1" >/dev/null 2>&1 \
 | 
						|
			&& printf "%s" "$1" && return 0 \
 | 
						|
			|| true
 | 
						|
	done
 | 
						|
	return 1
 | 
						|
}
 | 
						|
 | 
						|
error() {
 | 
						|
	printf "%s: Programmer error. Please report.\n" "$argv0" 1>&2
 | 
						|
	exit 1 || return 1
 | 
						|
}
 | 
						|
 | 
						|
# this will alias GNU and busybox lses to the functionality of 9 ls
 | 
						|
# - this is a stupid hack and GNU and busybox lses should do this
 | 
						|
# by default
 | 
						|
# shellcheck disable=SC2015
 | 
						|
ls --version >/dev/null 2>&1 || ls -x >/dev/null 2>&1 \
 | 
						|
	&& alias ls="ls -1A ." \
 | 
						|
	|| alias ls="ls ."
 | 
						|
 | 
						|
usage() {
 | 
						|
	printf "Usage: %s {c,cf,d,df} [type]\n" "$argv0" 1>&2
 | 
						|
	exit 1
 | 
						|
}
 | 
						|
 | 
						|
unsupported() {
 | 
						|
	printf "%s: Unknown/unsupported type %s for this operation\n" "$argv0" "$argv2" 1>&2
 | 
						|
	exit 1
 | 
						|
}
 | 
						|
 | 
						|
[ -z "$3" ] || usage
 | 
						|
 | 
						|
case "$argv1" in
 | 
						|
c)
 | 
						|
	case "$argv2" in
 | 
						|
	gzip)
 | 
						|
		dep gzip
 | 
						|
		gzip -c
 | 
						|
		# -c - output to standard output
 | 
						|
		;;
 | 
						|
	xzip)
 | 
						|
		dep xz
 | 
						|
		xzip -c
 | 
						|
		# -c - output to standard output
 | 
						|
		;;
 | 
						|
	*) unsupported ;;
 | 
						|
	esac ;;
 | 
						|
d)
 | 
						|
	case "$argv2" in
 | 
						|
	gzip)
 | 
						|
		dep gzip
 | 
						|
		gzip -cd
 | 
						|
		# -c - output to standard output
 | 
						|
		# -d - decompress
 | 
						|
		;;
 | 
						|
	lzip)
 | 
						|
		# should be improved but is decent
 | 
						|
		method=$(deps lzip 7z)
 | 
						|
		[ -n "$method" ] || dep 7z
 | 
						|
		case $method in
 | 
						|
		7z)
 | 
						|
			7z x -bd -si -so -tlzip
 | 
						|
			# x - extract
 | 
						|
			# -bd - disable percentage indicator
 | 
						|
			# -si - read from standard input
 | 
						|
			# -so - output to standard output
 | 
						|
			# -tlzip - type: lzip
 | 
						|
			;;
 | 
						|
		lzip)
 | 
						|
			lzip -cd
 | 
						|
			# -c - output to standard output
 | 
						|
			# -d - decompress
 | 
						|
			;;
 | 
						|
		*)
 | 
						|
			error
 | 
						|
			;;
 | 
						|
		esac ;;
 | 
						|
	tar)
 | 
						|
		dep tar
 | 
						|
		tar -xO
 | 
						|
		# -x - extract
 | 
						|
		# -O - output to standard output
 | 
						|
		;;
 | 
						|
	xzip)
 | 
						|
		dep xz
 | 
						|
		xz -cd
 | 
						|
		# -c - output to standard output
 | 
						|
		# -d - decompress
 | 
						|
		;;
 | 
						|
	*) unsupported ;;
 | 
						|
	esac ;;
 | 
						|
cf)
 | 
						|
	case "$argv2" in
 | 
						|
	*) unsupported ;;
 | 
						|
	esac ;;
 | 
						|
df)
 | 
						|
	case "$argv2" in
 | 
						|
	tar)
 | 
						|
		dep tar
 | 
						|
		tar -x
 | 
						|
		;;
 | 
						|
	unrar)
 | 
						|
		# UNTESTED
 | 
						|
		unrar x - "$3"
 | 
						|
		# x - extract
 | 
						|
		# - - stop parsing switches
 | 
						|
		;;
 | 
						|
	zip)
 | 
						|
		# unzip can't extract files that start with a dash as far as I
 | 
						|
		# can tell, so we have to use 7z(1)
 | 
						|
		dep 7z
 | 
						|
		7z x -bd -o. -si -tzip >/dev/null
 | 
						|
		# x - extract
 | 
						|
		# -bd - disable percentage indicator
 | 
						|
		# -o. - output to current dir
 | 
						|
		# -si - read from standard input
 | 
						|
		# -tzip - type: zip
 | 
						|
		;;
 | 
						|
	*) unsupported ;;
 | 
						|
	esac ;;
 | 
						|
*) usage ;;
 | 
						|
esac
 |