#!/bin/bash # Copyright (C) George Makrydakis 2009, 2010, 2011 # Copyright (C) Con Kolivas 2011 # 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; } 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)) && { i+="$(basename "$s")" [[ -e $i ]] || { printf "lrztar: file does not exist: %s\n" "$i" return 1 } lrzcat $p "$i" | tar x x=$? } || { ((v_o)) || p="$p -o $(basename "$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 "${@}"