#!/bin/bash # Copyright (C) George Makrydakis 2009-2011 # Copyright (C) Con Kolivas 2011-2012 # A bash wrapper for Con Kolivas' excellent lrzip utility. For the time # being, lrzip does not like pipes, so we had to do this. It is kind of # self - documenting, spawned out of a test tube bash shell script. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . function lrztar_local() { local hv="lrztar wrapper for compressing/decompressing \ whole directories with lrzip. lrztar [lrzip options] will compress directory \ to directory.tar.lrz lrztar -d [lrzip options] will extract directory \ from directory.tar.lrz lrzuntar [lrzip options] will extract directory \ from directory.tar.lrz lrz[un]tar -h will display this help message lrzip -h will display lrzip options" local p=( "${@:1:$(($#-1))}" ) s="${!#}" vopt=("lrz") \ v_w=0 v_S=0 v_D=0 v_p=0 v_q=0 v_L=0 \ v_n=0 v_l=0 v_b=0 v_g=0 v_z=0 v_U=0 \ v_T=0 v_N=0 v_v=0 v_f=0 v_d=0 v_h=0 \ v_H=0 v_c=0 v_k=0 v_o=0 x= i= which tar &> /dev/null \ || { printf "lrztar: no tar in your path\n"; return 1; } which lrzip &> /dev/null \ || { printf "lrztar: no lrzip in your path\n"; return 1; } which lrzcat &> /dev/null \ || { printf "lrztar: no lrzcat in your path\n"; return 1; } while getopts w:OS:DqL:nlbgzUTN:p:vfo:dtVhHck x; do [[ $x == [OtV] ]] && { printf "lrztar: invalid option for lrztar: %s\n" "$x"; return 1; } ((v_$x=${#vopt[@]})) [ $x == S ] && vopt[${#vopt[@]}]="$OPTARG" done [[ $(basename "$0") == lrzuntar ]] \ && { v_d=1; p=( -d "${p[@]}"); } { ! (($#)) || ((v_h)); } && { printf "%s\n" "$hv" return } [[ ${s%/*} != $s ]] && i="${s%/*}/" || i="./" ((v_d)) && { s="${s%/}" s="${s##*/}" i+="$s" s="${s%.tar.lrz}" [[ -e $i ]] || { printf "lrztar: file does not exist: %s\n" "$i" return 1 } ! ((v_f)) && [[ -e $s ]] && { printf "lrztar: $s exists, will not overwrite without -f option\n" return 1 } lrzcat "${p[@]}" "$i" | tar x x=$? } || { ((v_o)) || { s="${s%/}"; p+=( -o "${s##*/}.tar.${vopt[v_S]}"); } [[ -d $s ]] || { printf "lrztar: directory does not exist: %s\n" "$s" return 1 } tar c "$s" | lrzip "${p[@]}" x=$? } ! ((x)) && ((v_D)) && rm -rf "$s" &> /dev/null return $x } lrztar_local "${@}"