À mon travail, j'ai dû récupérer un grand nombre de bases PostgreSQL sous forme de dumps compressés. Une fois ces dumps récupérés, je devais restaurer les données qu'ils contenaient dans une base, tout ça pour exécuter un outil de statistiques. Exécuter un bunzip2/dropdb/createdb/pg_restore/bzip2 pour chacune des 54 dumps, merci bien mais je passe. Ou plutôt j'écris un script qui fera tout le boulot à ma place. Après tout, informaticien, c'est un métier où on bosse dur pour en faire le moins possible :)

Le résultat de ce travail est le script suivant :

#!/bin/sh

base=gl

if test $# -eq 0; then
  echo "Manque le fichier dump en ligne de commande !"
  exit -1
fi
dump=$1
if test ! -f $dump; then
  echo "Fichier inexistant !"
  exit -1
fi
type=`file $dump | awk -F " " '{ print $2 }'`

case "$type" in
  "SCO")
    echo -n "Décompression de l'archive Z...      "
    archiveur=gunzip
    extension=".Z"
    ;;
  "bzip2")
    echo -n "Décompression de l'archive BZ2...    "
    archiveur=bunzip2
    extension=".bz2"
    ;;
 # il est toujours possible d'ajouter la gestion d'autres extensions ici
esac

if test "$archiveur" != ""; then
  $archiveur $dump >/dev/null 2>&1
  if test $? -ne 0; then
    echo "ERREUR"
    exit -1
  fi
  dump=${dump%$extension}
fi

if test `psql -l -t | awk '{print $1}' | grep -w $base | wc -l` -eq 1; then
  echo -n "Suppression de la base de données... "
  dropdb $base >/dev/null 2>&1
  if test $? -ne 0; then
    echo "ERREUR"
    exit -1
  fi
fi

echo -n "Création de la base de données...    "
createdb $base >/dev/null 2>&1
if test $? -ne 0; then
  echo "ERREUR"
  exit -1
fi

echo -n "Intégration du dump...               "
psql -f $dump $base >/dev/null 2>&1
if test $? -ne 0; then
  echo "ERREUR"
  exit -1
fi

echo -n "Compression du dump en .bz2...       "
bzip2 $dump >/dev/null 2>&1
if test $? -ne 0; then
  echo "ERREUR"
  exit -1
fi

Et voilà le voeu de Christophe exaucé. J'espère que ça te plaira :)