diff --git a/bin/lsarchive b/bin/lsarchive index 7ac61450..0396b992 100755 --- a/bin/lsarchive +++ b/bin/lsarchive @@ -1,13 +1,11 @@ +#!/usr/bin/env bash # # Lists the contents of archives. # -# Authors: -# Sorin Ionescu -# +# Adapted from a script by Sorin Ionescu -local verbose - -if (( $# == 0 )); then +if (( $# == 0 )) +then cat >&2 <. EOF fi -if [[ "$1" == "-v" || "$1" == "--verbose" ]]; then - verbose=0 - shift +if [[ "$1" == "-v" || "$1" == "--verbose" ]] +then + verbose=0 + shift fi -while (( $# > 0 )); do - if [[ ! -s "$1" ]]; then - print "$0: file not valid: $1" >&2 +while (( $# > 0 )) +do + if [[ ! -s "$1" ]] + then + >&2 echo "$0: file not valid: $1" + shift + continue + fi + + case "${1:l}" in + *.tar.gz|*.tgz) tar t${verbose:+v}vzf "$1" ;; + *.tar.bz2|*.tbz|*.tbz2) tar t${verbose:+v}jf "$1" ;; + *.tar.xz|*.txz) tar --xz --help &> /dev/null \ + && tar --xz -t${verbose:+v}f "$1" \ + || xzcat "$1" | tar t${verbose:+v}f - ;; + *.tar.zma|*.tlz) tar --lzma --help &> /dev/null \ + && tar --lzma -t${verbose:+v}f "$1" \ + || lzcat "$1" | tar x${verbose:+v}f - ;; + *.tar) tar t${verbose:+v}f "$1" ;; + *.zip) unzip -l${verbose:+v} "$1" ;; + *.rar) unrar &> /dev/null \ + && unrar ${${verbose:+v}:-l} "$1" \ + || rar ${${verbose:+v}:-l} "$1" ;; + *.7z) 7za l "$1" ;; + *) >&2 echo "$0: cannot list: $1" + success=1 + ;; + esac + shift - continue - fi - - case "$1:l" in - (*.tar.gz|*.tgz) tar t${verbose:+v}vzf "$1" ;; - (*.tar.bz2|*.tbz|*.tbz2) tar t${verbose:+v}jf "$1" ;; - (*.tar.xz|*.txz) tar --xz --help &> /dev/null \ - && tar --xz -t${verbose:+v}f "$1" \ - || xzcat "$1" | tar t${verbose:+v}f - ;; - (*.tar.zma|*.tlz) tar --lzma --help &> /dev/null \ - && tar --lzma -t${verbose:+v}f "$1" \ - || lzcat "$1" | tar x${verbose:+v}f - ;; - (*.tar) tar t${verbose:+v}f "$1" ;; - (*.zip) unzip -l${verbose:+v} "$1" ;; - (*.rar) unrar &> /dev/null \ - && unrar ${${verbose:+v}:-l} "$1" \ - || rar ${${verbose:+v}:-l} "$1" ;; - (*.7z) 7za l "$1" ;; - (*) - print "$0: cannot list: $1" >&2 - success=1 - ;; - esac - - shift done