La idea es que los respaldos tengan un mismo esquema variando solo el número de la BD. Tengo el siguiente código:
Código:
el script debe de ser llamado: script.sh directorio/donde/estan/los/pgdumps/#!/bin/bash echo 'INICIANDO SCRIPT' USUARIO='mi_usuario' # El usuario que tendrá permisos sobre las BDs DIRECTORIO=$1 # Donde se encuentran los archivos SQL de los respaldos. Se tiene que pasar como parámetro. ARCHIVOS=($(ls -t $DIRECTORIO)) NUMARCHIVOS=${#ARCHIVOS[*]} # Calcula el número de archivos INDICE=0 echo 'INICIANDO BUCLE' while [ $INDICE -lt $NUMARCHIVOS ]; do #echo ${ARCHIVOS[$INDICE]} if [[ ${ARCHIVOS[$INDICE]} =~ base([0-9]{2})(.*).pgdump ]] # Debe tener el formato baseXX-DD-MM-YYYY.pgdump then BASEDATOS='base'${BASH_REMATCH[1]} # El nombre de la Base de Datos echo '------------- INICIO '$BASEDATOS dropdb $BASEDATOS # Eliminando 'versiones' anteriores createdb -E LATIN1 -O $USUARIO $BASEDATOS # Creando... psql -U $USUARIO -d $BASEDATOS -f $1${ARCHIVOS[$INDICE]} # Montando la BD conrrespondiente psql -c "ALTER DATABASE $BASEDATOS SET DateStyle TO 'SQL, DMY'" # Cambiando el esquema de fechas mv $1${ARCHIVOS[$INDICE]} tmp/$1${ARCHIVOS[$INDICE]} echo $1${ARCHIVOS[$INDICE]} echo '----------------- FIN '$BASEDATOS fi let INDICE++ done exit 0
Funciona: elimina, crea y monta los datos... pero hay un problema al intentar moverlos. Me aparece el siguiente mensaje de error:
Cita:
... con todo y esos símbolos. El directorio tmp/ esta en el mismo nivel donde se encuentra el script. Los archivos y el directorio tienen permisos 777.mv: no se puede mover �respaldos/junio2008/base12_10-06-08.pgdump� a �tmp/respaldos/junio2008/base12_10-06-08.pgdump�: No existe el fichero o el directorio
¿Por qué aparecen dichos símbolos?. Agradezco cualquier comentario u observación sobre mi script (apenas me adentro en Bash por esto). Estoy trabajando con Postgres 8.2.
PD: ¿será posible ejecutar los archivos en órden?.. que ahora los hace salteados; base09, base50, base12, etc.., preferiría fuera base01, base02, base03... etc.