Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/07/2008, 17:31
Avatar de jam1138
jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 6 meses
Puntos: 102
script Bash para montar varias BDs

Se están trayendo respaldos de varios lugares, la idea es montarlos en una sola máquina. Son más de 50 respaldos por lo que creé un script para hacer esta tarea.

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:
#!/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
el script debe de ser llamado: script.sh directorio/donde/estan/los/pgdumps/

Funciona: elimina, crea y monta los datos... pero hay un problema al intentar moverlos. Me aparece el siguiente mensaje de error:
Cita:
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
... 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.

¿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.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"