bash : add pack/unpack.
This commit is contained in:
parent
b952ea0583
commit
e6b9f7d3e3
|
@ -457,6 +457,13 @@ Command|Description
|
||||||
`dcpu [SERVICE]`|Update and recreate a compose service.
|
`dcpu [SERVICE]`|Update and recreate a compose service.
|
||||||
`dcul [SERVICE]`|Start a compose service and show its logs.
|
`dcul [SERVICE]`|Start a compose service and show its logs.
|
||||||
|
|
||||||
|
## Pack.
|
||||||
|
|
||||||
|
Command|Description
|
||||||
|
---|---
|
||||||
|
`pack <TARGET.ext> <FILES>`|Create desired file format with other files.
|
||||||
|
`unpack <FILES>`|Attempt to extract file content.
|
||||||
|
|
||||||
## Environment variables.
|
## Environment variables.
|
||||||
|
|
||||||
Variable|Description
|
Variable|Description
|
||||||
|
|
175
.linux/bash/module/pack.sh
Normal file
175
.linux/bash/module/pack.sh
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
_PACK_SUPPORTED=".tar$|.zip$"
|
||||||
|
|
||||||
|
# Pack files into desired format.
|
||||||
|
# Usage: pack <TARGET.ext> <FILES>
|
||||||
|
pack()
|
||||||
|
{
|
||||||
|
local output="${1}"
|
||||||
|
local targets=("${@:2}")
|
||||||
|
local format="${output##*.}"
|
||||||
|
local name="${output%.*}"
|
||||||
|
|
||||||
|
# report no output.
|
||||||
|
if [[ "${output}" = "" ]]; then
|
||||||
|
echo "Usage: pack <TARGET.ext> <FILES>"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# report no format.
|
||||||
|
if [[ "${format}" = "" ]]; then
|
||||||
|
echo "Could not determine output format."
|
||||||
|
echo "Usage: pack <TARGET.ext> <FILES>"
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# report no targets.
|
||||||
|
if [[ "${targets}" = "" ]]; then
|
||||||
|
echo "Usage: pack <TARGET.ext> <FILES>"
|
||||||
|
return 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
# process.
|
||||||
|
case "${format}" in
|
||||||
|
"tgz")
|
||||||
|
_pack_tgz "${@}"
|
||||||
|
;;
|
||||||
|
"txz")
|
||||||
|
_pack_txz "${@}"
|
||||||
|
;;
|
||||||
|
"tar")
|
||||||
|
_pack_tar "${@}"
|
||||||
|
;;
|
||||||
|
"zip")
|
||||||
|
_pack_zip "${@}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# attempt to unpack everything.
|
||||||
|
# usage: unpack <FILES>
|
||||||
|
unpack()
|
||||||
|
{
|
||||||
|
local targets=("${@}")
|
||||||
|
local count=0
|
||||||
|
local failed=0
|
||||||
|
local total=${#targets[@]}
|
||||||
|
|
||||||
|
# show error if no target specified.
|
||||||
|
if [[ "${targets}" = "" ]]; then
|
||||||
|
targets=($(ls | grep -E ${_PACK_SUPPORTED}))
|
||||||
|
total=${#targets[@]}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# process all files.
|
||||||
|
for target in "${targets[@]}"; do
|
||||||
|
# increment counter.
|
||||||
|
((count++))
|
||||||
|
|
||||||
|
# prepare status.
|
||||||
|
local status="[${count}/${total}] ${target}"
|
||||||
|
|
||||||
|
# show status.
|
||||||
|
echo -e "${status}"
|
||||||
|
|
||||||
|
# unpack file type.
|
||||||
|
local type="${target##*.}"
|
||||||
|
|
||||||
|
# unpack content.
|
||||||
|
case "${type,,}" in
|
||||||
|
"zip")
|
||||||
|
_unpack_zip "${target}"
|
||||||
|
;;
|
||||||
|
"7z")
|
||||||
|
_unpack_7z "${target}"
|
||||||
|
;;
|
||||||
|
"tgz")
|
||||||
|
_unpack_tgz "${target}"
|
||||||
|
;;
|
||||||
|
"txz")
|
||||||
|
_unpack_txz "${target}"
|
||||||
|
;;
|
||||||
|
"tar")
|
||||||
|
_unpack_tar "${target}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "${target}: format not supported."
|
||||||
|
return 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# actions on error.
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
_error "${target}"
|
||||||
|
((failed++))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# print report.
|
||||||
|
if [[ ${count} -gt 1 ]]; then
|
||||||
|
if [[ ${failed} -gt 0 ]]; then
|
||||||
|
echo -e "${color_bred}Items failed to unpack: ${failed}.${color_default}"
|
||||||
|
else
|
||||||
|
echo -e "${color_green}All successful.${color_default}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# show error.
|
||||||
|
_error()
|
||||||
|
{
|
||||||
|
echo -e "${color_bred}${1}: failed.${color_default}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pack zip.
|
||||||
|
_pack_zip()
|
||||||
|
{
|
||||||
|
zip -9 -r "${@}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# pack tgz.
|
||||||
|
_pack_tgz()
|
||||||
|
{
|
||||||
|
tar -c "${@:2}" | pv -s $(du -csb "${@:2}" | sed -n -e '$p' | awk '{print $1}') | gzip -1 > "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# pack txz.
|
||||||
|
_pack_txz()
|
||||||
|
{
|
||||||
|
tar -c "${@:2}" | pv -s $(du -csb "${@:2}" | sed -n -e '$p' | awk '{print $1}') | xz -9e > "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# pack tar.
|
||||||
|
_pack_tar()
|
||||||
|
{
|
||||||
|
tar -c "${@:2}" | pv -s $(du -csb "${@:2}" | sed -n -e '$p' | awk '{print $1}') > "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# unpack zip archive.
|
||||||
|
_unpack_zip()
|
||||||
|
{
|
||||||
|
unzip "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# unpack 7z archive.
|
||||||
|
_unpack_7z()
|
||||||
|
{
|
||||||
|
7z x "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# unpack tgz archive.
|
||||||
|
_unpack_tgz()
|
||||||
|
{
|
||||||
|
pv "${1}" | gzip -d | tar -xf -
|
||||||
|
}
|
||||||
|
|
||||||
|
# unpack txz archive.
|
||||||
|
_unpack_txz()
|
||||||
|
{
|
||||||
|
pv "${1}" | xz -d | tar -xf -
|
||||||
|
}
|
||||||
|
|
||||||
|
# unpack tar archive.
|
||||||
|
_unpack_tar()
|
||||||
|
{
|
||||||
|
pv "${1}" | tar -xf -
|
||||||
|
}
|
Reference in a new issue