p7zip-rar/contrib/gzip-like_CLI_wrapper_for_7z/p7zip
2017-10-11 12:40:22 +02:00

145 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
# gzip-like CLI wrapper for p7zip
# version 2.0
#
# History
# 2.0 :
# - support for -filename, "file name"
# - p7zip file1 file2 ...
set -e
usage ()
{
echo "Usage: $0 [-d] [-h|--help] [--] [ name ... ]"
echo ""
echo " -h print this help"
echo " -d decompress file"
echo " -- treats all subsequent arguments as file names, even if they start with a dash"
echo ""
exit 1
}
doit()
{
compress=$1
file="$2"
if [ "${file}" != "" ] ; then
if ${compress} ; then
if [ -f "${file}" ] ; then
rm -f -- "${file}.7z"
7za a -- "${file}.7z" "${file}"
if [ "$?" != "0" ] ; then
rm -f -- "${file}.7z"
exit 1
fi
rm -- "${file}"
else
exit 1
fi
else
case "${file}" in
*.7z)
if [ -f "${file}" ] ; then
7za x -- "${file}"
if [ "$?" != "0" ] ; then
exit 1
fi
rm -- "${file}"
else
exit 1
fi
;;
*)
echo "$0: ${file}: unknown suffix"
exit 1
;;
esac
fi
return 0
fi
P7ZIPTMP=${TMP:-/tmp}
tmp=`mktemp ${P7ZIPTMP}/p7zip.XXXXXXXX`
trap "rm -f -- ${tmp}" 0
if ${compress} ; then
if tty > /dev/null ; then
echo "$0: compressed data not written to a terminal."
echo "For help, type: $0 -h"
exit 1
fi
rm -f -- ${tmp}
7za a -si -- ${tmp} >/dev/null
if [ "$?" != "0" ] ; then
exit 1
fi
cat ${tmp}
else
cat > ${tmp}
7za x -so -- ${tmp} 2>/dev/null | cat
if [ "$?" != "0" ] ; then
exit 1
fi
fi
rm -f -- ${tmp}
return 0
}
## MAIN
compress=true
flag=true
file=""
# make sure they're present, before we screw up
for i in mktemp 7za rm cat tty ; do
if ! which $i > /dev/null ; then
echo "$0: $i: command not found"
exit 1
fi
done
# files and flags
while [ "$#" != "0" ] ; do
case "$1" in
-d)
compress=false # decompressing
;;
-c)
echo "$0: ignoring $1 option (not yet implemented)"
;;
-h|--help)
usage
;;
--)
flag=false
shift
break
;;
*)
doit ${compress} "$1"
file="$1"
;;
esac
shift
done
# only files now
while [ "$#" != "0" ] ; do
doit ${compress} "$1"
file="$1"
shift
done
if [ "${file}" = "" ] ; then
# compressing/decompressing using standart I/O
doit ${compress}
fi
exit 0