Sirviendo información sobre Linux desde 1998

Un pequeño script para copias de seguridad

El script que os presento sirve para realizar copiar de seguridad de vuestros datos. Lo uso para mantener la información sincronizada entre dos ordenadores con los que trabajo. Para ello uso un pendrive.

El script lo tenéis al final del artículo, sólo tenéis que copiarlo en vuestro editor de texto favorito y guardarlo con el nombre: copia_seguridad.sh

Después debéis ejecutar:

chmod +x copia_seguridad.sh

Y copiarlo a /usr/local/bin

¿Cómo usar este script?

Debes crear una carpeta que se llame almacen con la orden:

mkdir ~/almacen

Una vez creada copia allí todos los ficheros de los que quieras mantener una copia de seguridad.

Después ejecuta:

copia_seguridad.sh total /...(directorio de copias de seguridad, puede ser un pendrive)

Una vez hecha la copia de seguridad total cada vez que modifiques algo y desees guardar una copia de seguridad ejecuta:

copia_seguridad.sh incremental /...(directorio de copias de seguridad, puede ser un pendrive)

Sólo copiará los ficheros que hayan sido actualizados.

Para extraer la copia de seguridad, por ejemplo, en otro ordenador con el que quieras mantener la información sincronizada, ejecuta:

copia_seguridad.sh extraer /...(directorio de copias de seguridad, puede ser un pendrive)

Sólo se extraerán los ficheros que hayan sido actualizados, en el caso de que ya hayas hecho sincronizaciones previas entre los equipos.

#!/bin/bash

if [[ $1 =~ (total|incremental|extraer) ]]; then
echo 'Comenzando...'
else
echo $0 '[total|incremental|extraer] directorio'
exit 0
fi

function quitarDirectorios
{
	while read a ; do
	if [[ -d $a ]]; then
		#echo $a es un directorio
		continue
	else
		echo $a
	fi
	done
}


almacen=`echo ~/almacen`

if [[ -e $2 ]]; then
echo Verificado path a $2
cd "$2"
pathSalida=`pwd`
else
echo Archivo $2 no encontrado
exit 0
fi

if [[ $1 == incremental ]]; then
fecha=`cat "$pathSalida/ultimaFechaCopia.txt"`
fechaAlmacen=`cat "$almacen/ultimaFechaCopia.txt"`
fi

cd "$almacen"

if [[ $1 == extraer ]]; then
	if [[ $fecha == $fechaAlmacen ]]; then
		echo Copias totales coinciden
	else
		echo Actualizando copias totales
		for a in `ls "$pathSalida"/*.total.tar.gz`; do
			tar -xzf "$a"
		done
	fi
	echo Actualizando copias incrementales
	for a in `ls "$pathSalida"/*.incremental.tar.gz`; do
		tar -xzvf "$a" | quitarDirectorios
	done
	exit 0
fi

for a in `ls`; do
if [[ $a == ultimaFechaCopia.txt ]]; then
echo Omitido $a
else 
if [[ $1 == incremental ]]; then
	echo Copia incremental de $a
	tar -czvf "$pathSalida/$a.incremental.tar.gz" "$a" --after-date="$fecha" 2> /dev/null | quitarDirectorios
elif [[ $1 == total ]]; then
	echo Copia total de $a
	tar -czf "$pathSalida/$a.total.tar.gz" "$a"
fi
fi
done

if [[ $1 == total ]]; then
date +"%F %X"  >  "$pathSalida/ultimaFechaCopia.txt"
cp "$pathSalida/ultimaFechaCopia.txt" "$almacen"
rm -Rf "$pathSalida"/*.incremental.tar.gz
fi

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

El script fantastico pero no me rula

Holas puedes pasarme el comando para salvar desde el pen(sdb) a almacen y viceversa por mas que pruebo no spy capaz.

Gracias