#!/bin/sh IFS=! for table in `mdb-tables -d ! $1` do echo "Export de la table $1" dbname=`echo "$1" | awk -F/ '{print $NF}'` mdb-export -d \| "$1" "$table" > "$2/$dbname.$table.csv" doneJ'explique un peu :
- IFS=! pour fixer le séparateur de champs dans la boucle for (les noms de tables peuvent contenir des espaces, jamais des !)
- mdb-tables -d ! lui dit justement d'utiliser le ! comme séparateur des noms de tables
- mdb-export -d | lui dit d'utiliser le | comme séparateur dans le fichier csv. Là ça dépend un peu des données, mais le caractère ',' par défaut ne convient de toute façon pas car la virgule sert aussi de séparateur décimal
- deux paramètres à passer à la ligne de commande : $1 le nom du fichier mdb à traiter, $2 le répertoire dans lequel je veux sauvegarder mes exports.
On pourrait facilement rajouter sur le même principe un petit mdb-schema pour exporter les schémas de création des tables exportées.
Et pour le lancer sur tout un répertoire :
for fic in rep/*.mdb; do ./export-databse.sh $fic repcsv ; donePour la bonne bouche, comme je n'ai pas réussi à lui imposer le caractère décimal et que la commande COPY de postgresql veut un point, je lance :
sed -i s/,/./g repcsv/*.csv(inconvénient : si vous avec des virgules dans des champs de chaînes de caractères, elles sont aussi remplacées)
Pas si mal, non ?
Franck
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.