plugin/extract: `shfmt`

pull/2095/head
John D Pell 2022-02-17 21:55:53 -08:00 committed by John D Pell
parent f076319a96
commit 32523a5e21
1 changed files with 61 additions and 59 deletions

View File

@ -3,75 +3,77 @@ about-plugin 'one command to extract them all...'
# extract file(s) from compressed status # extract file(s) from compressed status
function extract() { function extract() {
local opt local opt
local OPTIND=1 local OPTIND=1
while getopts "hv" opt; do while getopts "hv" opt; do
case "$opt" in case "$opt" in
h) h)
cat <<EOU cat << EOU
Usage: ${FUNCNAME[0]} [option] <archives> Usage: ${FUNCNAME[0]} [option] <archives>
options: options:
-h show this message and exit -h show this message and exit
-v verbosely list files processed -v verbosely list files processed
EOU EOU
return return
;; ;;
v) v)
local -r verbose='v' local -r verbose='v'
;; ;;
?) ?)
extract -h >&2 extract -h >&2
return 1 return 1
;; ;;
esac esac
done done
shift $((OPTIND-1)) shift $((OPTIND - 1))
[ $# -eq 0 ] && extract -h && return 1 [ $# -eq 0 ] && extract -h && return 1
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
if [[ ! -f "$1" ]]; then if [[ ! -f "$1" ]]; then
echo "extract: '$1' is not a valid file" >&2 echo "extract: '$1' is not a valid file" >&2
shift shift
continue continue
fi fi
local -r filename=$(basename -- $1) local -r filename=$(basename -- $1)
local -r filedirname=$(dirname -- $1) local -r filedirname=$(dirname -- $1)
local targetdirname=$(sed 's/\(\.tar\.bz2$\|\.tbz$\|\.tbz2$\|\.tar\.gz$\|\.tgz$\|\.tar$\|\.tar\.xz$\|\.txz$\|\.tar\.Z$\|\.7z$\|\.nupkg$\|\.zip$\|\.war$\|\.jar$\)//g' <<< $filename) local targetdirname=$(sed 's/\(\.tar\.bz2$\|\.tbz$\|\.tbz2$\|\.tar\.gz$\|\.tgz$\|\.tar$\|\.tar\.xz$\|\.txz$\|\.tar\.Z$\|\.7z$\|\.nupkg$\|\.zip$\|\.war$\|\.jar$\)//g' <<< $filename)
if [ "$filename" = "$targetdirname" ]; then if [ "$filename" = "$targetdirname" ]; then
# archive type either not supported or it doesn't need dir creation # archive type either not supported or it doesn't need dir creation
targetdirname="" targetdirname=""
else else
mkdir -v "$filedirname/$targetdirname" mkdir -v "$filedirname/$targetdirname"
fi fi
if [ -f "$1" ]; then if [ -f "$1" ]; then
case "$1" in case "$1" in
*.tar.bz2|*.tbz|*.tbz2) tar "x${verbose}jf" "$1" -C "$filedirname/$targetdirname" ;; *.tar.bz2 | *.tbz | *.tbz2) tar "x${verbose}jf" "$1" -C "$filedirname/$targetdirname" ;;
*.tar.gz|*.tgz) tar "x${verbose}zf" "$1" -C "$filedirname/$targetdirname" ;; *.tar.gz | *.tgz) tar "x${verbose}zf" "$1" -C "$filedirname/$targetdirname" ;;
*.tar.xz|*.txz) tar "x${verbose}Jf" "$1" -C "$filedirname/$targetdirname" ;; *.tar.xz | *.txz) tar "x${verbose}Jf" "$1" -C "$filedirname/$targetdirname" ;;
*.tar.Z) tar "x${verbose}Zf" "$1" -C "$filedirname/$targetdirname" ;; *.tar.Z) tar "x${verbose}Zf" "$1" -C "$filedirname/$targetdirname" ;;
*.bz2) bunzip2 "$1" ;; *.bz2) bunzip2 "$1" ;;
*.deb) dpkg-deb -x${verbose} "$1" "${1:0:-4}" ;; *.deb) dpkg-deb -x${verbose} "$1" "${1:0:-4}" ;;
*.pax.gz) gunzip "$1"; set -- "$@" "${1:0:-3}" ;; *.pax.gz)
*.gz) gunzip "$1" ;; gunzip "$1"
*.pax) pax -r -f "$1" ;; set -- "$@" "${1:0:-3}"
*.pkg) pkgutil --expand "$1" "${1:0:-4}" ;; ;;
*.rar) unrar x "$1" ;; *.gz) gunzip "$1" ;;
*.rpm) rpm2cpio "$1" | cpio -idm${verbose} ;; *.pax) pax -r -f "$1" ;;
*.tar) tar "x${verbose}f" "$1" -C "$filedirname/$targetdirname" ;; *.pkg) pkgutil --expand "$1" "${1:0:-4}" ;;
*.xz) xz --decompress "$1" ;; *.rar) unrar x "$1" ;;
*.zip|*.war|*.jar|*.nupkg) unzip "$1" -d "$filedirname/$targetdirname" ;; *.rpm) rpm2cpio "$1" | cpio -idm${verbose} ;;
*.Z) uncompress "$1" ;; *.tar) tar "x${verbose}f" "$1" -C "$filedirname/$targetdirname" ;;
*.7z) 7za x -o"$filedirname/$targetdirname" "$1" ;; *.xz) xz --decompress "$1" ;;
*) echo "'$1' cannot be extracted via extract" >&2;; *.zip | *.war | *.jar | *.nupkg) unzip "$1" -d "$filedirname/$targetdirname" ;;
esac *.Z) uncompress "$1" ;;
fi *.7z) 7za x -o"$filedirname/$targetdirname" "$1" ;;
*) echo "'$1' cannot be extracted via extract" >&2 ;;
esac
fi
shift shift
done done
} }
# Shorten extract # Shorten extract
alias xt='extract' alias xt='extract'