#!/bin/bash
#======================================================================
# Copyright (c) 1997-1999 Daniele Giacomini daniele@pluto.linux.it
#
# 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, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#======================================================================
# salva <directory-di-destinazione>  < <meta>elenco</meta>
#
# Archiviazione di tutti i file e directory indicati attraverso lo
# standard input, utilizzando <directory-di-destinazione> come luogo
# di destinazione degli archivi.
#
# Gli archivi vengono generati in formato .tgz, cio tar+gzip.
#======================================================================

#======================================================================
# Variabili.
#======================================================================

    #------------------------------------------------------------------
    # L'elenco dei file e delle directory da archiviare proviene dallo
    # standard input.
    #------------------------------------------------------------------
    ELENCO_DA_ARCHIVIARE=`cat`
    #------------------------------------------------------------------
    # Directory di destinazione.
    #------------------------------------------------------------------
    DESTINAZIONE=$1

#======================================================================
# Funzioni.
#======================================================================

    #------------------------------------------------------------------
    # Visualizza la sintassi corretta per l'utilizzo di questo script.
    #------------------------------------------------------------------
    function sintassi () {
	echo ""
	echo "cat elenco | $0 <directory-di-destinazione>"
	echo ""
    }

#======================================================================
# Inizio.
#======================================================================

    #------------------------------------------------------------------
    # Verifica la quantit di argomenti.
    #------------------------------------------------------------------
    if [ $# != 1 ]
    then
        #--------------------------------------------------------------
	# La quantit di argomenti  errata. Richiama la funzione
	# sintassi e termina l'esecuzione dello script restituendo
	# un valore corrispondente a falso.
        #--------------------------------------------------------------
	sintassi
        exit 1
    fi
    #------------------------------------------------------------------
    # Verifica se esiste la directory di destinazione.
    #------------------------------------------------------------------
    if [ -e $DESTINAZIONE ]
    then
        #--------------------------------------------------------------
        # Qualcosa con quel nome esiste gi.
        # Si deve verificare che si tratti di una directory.
        #--------------------------------------------------------------
        if [ ! -d $DESTINAZIONE ]
        then
            #----------------------------------------------------------
            # Non si tratta di una directory.
            #----------------------------------------------------------
            echo "Non  possibile procedere con l'archiviazione"
            echo "perch $DESTINAZIONE esiste e non  una directory."
            #----------------------------------------------------------
            # Lo script termina restituendo un valore corrispondente
	    # a falso.
            #----------------------------------------------------------
            exit 1
        fi
    else
        #--------------------------------------------------------------
        # La directory non esiste.
        # Si tenta di crearla.
        #--------------------------------------------------------------
	if ! mkdir $DESTINAZIONE
        then
            #----------------------------------------------------------
            # Non  stato possibile creare la directory
            #----------------------------------------------------------
            echo "Non  possibile creare la directory"
            echo "$DESTINAZIONE"
            #----------------------------------------------------------
            # Lo script termina restituendo un valore corrispondente
	    # a falso.
            #----------------------------------------------------------
            exit 1
        fi
    fi
    #------------------------------------------------------------------
    # Giunti a questo punto, dovrebbe esistere la directory
    # di destinazione.
    # Inizia il ciclo di archiviazione.
    #------------------------------------------------------------------
    for DA_ARCHIVIARE in $ELENCO_DA_ARCHIVIARE
    do
        #--------------------------------------------------------------
        # Estrae il nome del file o della directory senza il suo
        # percorso.
        #--------------------------------------------------------------
        BASE_NAME=`basename $DA_ARCHIVIARE`
        #--------------------------------------------------------------
        # Comprime il file o il contenuto del directory ottenendo un
        # file compresso con lo stesso nome e l'aggiunta
        # dell'estensione .tgz.
        # Si utilizza tar specificando in particolare l'opzione z
	# che permette di comprimere automaticamente l'archivio
        # attraverso gzip;
        #--------------------------------------------------------------
        tar czvf $DESTINAZIONE/$BASE_NAME.tgz $DA_ARCHIVIARE
    done
    #------------------------------------------------------------------
    # L'operazione di archiviazione e' terminata.
    #------------------------------------------------------------------
    echo "L'archiviazione e' terminata."

#======================================================================
# Fine.
#======================================================================
