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

Enviar nuevo comentario

  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <center> <pre>
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.

Más información sobre opciones de formato

Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.