82 lines
1.6 KiB
Bash
Executable File
82 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
_printhelp()
|
|
{
|
|
cat <<EOF
|
|
Usage: ${1##*/} [-m METHOD] [-v] FILES|FOLDERS
|
|
|
|
Create an archive from a single or multiples files/folders.
|
|
|
|
-h: Display this help.
|
|
-m: Choose compression method.
|
|
* gz: gzip (default).
|
|
* xz: LZMA.
|
|
-v: Exclude VCS data. (GNU tar only.)
|
|
EOF
|
|
}
|
|
|
|
OPTION_VCS=""
|
|
OPTION_METHOD=""
|
|
while getopts ":hm:v" opt; do
|
|
case $opt in
|
|
h)
|
|
_printhelp "$0"
|
|
exit 1
|
|
;;
|
|
m)
|
|
OPTION_METHOD="${OPTARG}"
|
|
;;
|
|
v)
|
|
OPTION_VCS="--exclude-vcs"
|
|
;;
|
|
?)
|
|
_printhelp "$0"
|
|
exit 1
|
|
;;
|
|
:)
|
|
echo "Missing argument."
|
|
_printhelp "$0"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
ARCEXT="tar.gz"
|
|
ARCOPT="z"
|
|
case $OPTION_METHOD in
|
|
"gz")
|
|
ARCEXT="tar.gz"
|
|
ARCOPT="z"
|
|
;;
|
|
"xz")
|
|
ARCEXT="tar.xz"
|
|
ARCOPT="J"
|
|
;;
|
|
esac
|
|
|
|
shift $(($OPTIND - 1))
|
|
|
|
case $# in
|
|
1)
|
|
FULLPATH="$(realpath "$1")"
|
|
OUTPUT="${FULLPATH}-$(date +%F-%H%M%S).${ARCEXT}"
|
|
|
|
(cd "${FULLPATH}/.." && \
|
|
tar -${ARCOPT} -cf ${OPTION_VCS} "$OUTPUT" "${FULLPATH##*/}" )
|
|
;;
|
|
|
|
0)
|
|
FULLPATH="$PWD"
|
|
OUTPUT="${FULLPATH}-$(date +%F-%H%M%S).${ARCEXT}"
|
|
(cd "${FULLPATH}/.." && \
|
|
tar -${ARCOPT} -cf ${OPTION_VCS} "$OUTPUT" "${FULLPATH##*/}" )
|
|
;;
|
|
|
|
*)
|
|
FULLPATH="$PWD"
|
|
OUTPUT="${FULLPATH}/${FULLPATH##*/}-$(date +%F-%H%M%S).${ARCEXT}"
|
|
|
|
tar -${ARCOPT} -cf ${OPTION_VCS} "$OUTPUT" "$@"
|
|
;;
|
|
esac
|