# Usage: simple-extract # Using option -d deletes the original archive file. #f5# Smart archive extractor simple-extract() { emulate -L zsh setopt extended_glob noclobber local DELETE_ORIGINAL DECOMP_CMD USES_STDIN USES_STDOUT GZTARGET WGET_CMD local RC=0 zparseopts -D -E "d=DELETE_ORIGINAL" for ARCHIVE in "${@}"; do case $ARCHIVE in *(tar.bz2|tbz2|tbz)) DECOMP_CMD="tar -xvjf -" USES_STDIN=true USES_STDOUT=false ;; *(tar.gz|tgz)) DECOMP_CMD="tar -xvzf -" USES_STDIN=true USES_STDOUT=false ;; *(tar.xz|txz|tar.lzma)) DECOMP_CMD="tar -xvJf -" USES_STDIN=true USES_STDOUT=false ;; *tar) DECOMP_CMD="tar -xvf -" USES_STDIN=true USES_STDOUT=false ;; *rar) DECOMP_CMD="unrar x" USES_STDIN=false USES_STDOUT=false ;; *lzh) DECOMP_CMD="lha x" USES_STDIN=false USES_STDOUT=false ;; *7z) DECOMP_CMD="7z x" USES_STDIN=false USES_STDOUT=false ;; *(zip|jar)) DECOMP_CMD="unzip" USES_STDIN=false USES_STDOUT=false ;; *deb) DECOMP_CMD="ar -x" USES_STDIN=false USES_STDOUT=false ;; *bz2) DECOMP_CMD="bzip2 -d -c -" USES_STDIN=true USES_STDOUT=true ;; *(gz|Z)) DECOMP_CMD="gzip -d -c -" USES_STDIN=true USES_STDOUT=true ;; *(xz|lzma)) DECOMP_CMD="xz -d -c -" USES_STDIN=true USES_STDOUT=true ;; *) print "ERROR: '$ARCHIVE' has unrecognized archive type." >&2 RC=$((RC+1)) continue ;; esac if ! check_com ${DECOMP_CMD[(w)1]}; then echo "ERROR: ${DECOMP_CMD[(w)1]} not installed." >&2 RC=$((RC+2)) continue fi GZTARGET="${ARCHIVE:t:r}" if [[ -f $ARCHIVE ]] ; then print "Extracting '$ARCHIVE' ..." if $USES_STDIN; then if $USES_STDOUT; then ${=DECOMP_CMD} < "$ARCHIVE" > $GZTARGET else ${=DECOMP_CMD} < "$ARCHIVE" fi else if $USES_STDOUT; then ${=DECOMP_CMD} "$ARCHIVE" > $GZTARGET else ${=DECOMP_CMD} "$ARCHIVE" fi fi [[ $? -eq 0 && -n "$DELETE_ORIGINAL" ]] && rm -f "$ARCHIVE" elif [[ "$ARCHIVE" == (#s)(https|http|ftp)://* ]] ; then if check_com curl; then WGET_CMD="curl -L -k -s -o -" elif check_com wget; then WGET_CMD="wget -q -O - --no-check-certificate" else print "ERROR: neither wget nor curl is installed" >&2 RC=$((RC+4)) continue fi print "Downloading and Extracting '$ARCHIVE' ..." if $USES_STDIN; then if $USES_STDOUT; then ${=WGET_CMD} "$ARCHIVE" | ${=DECOMP_CMD} > $GZTARGET RC=$((RC+$?)) else ${=WGET_CMD} "$ARCHIVE" | ${=DECOMP_CMD} RC=$((RC+$?)) fi else if $USES_STDOUT; then ${=DECOMP_CMD} =(${=WGET_CMD} "$ARCHIVE") > $GZTARGET else ${=DECOMP_CMD} =(${=WGET_CMD} "$ARCHIVE") fi fi else print "ERROR: '$ARCHIVE' is neither a valid file nor a supported URI." >&2 RC=$((RC+8)) fi done return $RC } __archive_or_uri() { _alternative \ 'files:Archives:_files -g "*.(#l)(tar.bz2|tbz2|tbz|tar.gz|tgz|tar.xz|txz|tar.lzma|tar|rar|lzh|7z|zip|jar|deb|bz2|gz|Z|xz|lzma)"' \ '_urls:Remote Archives:_urls' } _simple_extract() { _arguments \ '-d[delete original archivefile after extraction]' \ '*:Archive Or Uri:__archive_or_uri' } compdef _simple_extract simple-extract alias se=simple-extract #f5# Set all ulimit parameters to \kbd{unlimited} allulimit() { ulimit -c unlimited ulimit -d unlimited ulimit -f unlimited ulimit -l unlimited ulimit -n unlimited ulimit -s unlimited ulimit -t unlimited }