145 lines
2.5 KiB
Bash
Executable File
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
|
|
|