Découper un fichier volumineux sous Linux

Mise à jour du 06/09/2013, suite à l’article de Korben situé ici : http://korben.info/comment-extraire-une-seule-base-dun-dump-sql-complet.html
Il semblerait que l’on puisse faire la même chose avec un simple sed 🙂
————–

Dans le cadre d’une récupération de sauvegarde, j’ai du remonter un dump d’une base PostGreSQL. Problème, j’avais fait un pg_dumpall (de toutes les bases), et il ne fallait remonter qu’une seule des bases de données. Sachant que le dump dépassait les 2Go, une découpe à la main n’était pas possible.

La première étape a été de retrouver les lignes de début et de fin de découpage, grace à la commande grep :

grep -n ‘\\connect’ dump.sql

Cette commande va sortir toutes les occurrences de \connect, avec le numéro de ligne. De là, je peux repérer la base de données qui m’intéresse, et savoir quelle portion du fichier je dois prendre. Supposons que je doive prendre de la ligne 12547 à la ligne 1665846, je vais utiliser la commande suivante :

head -n 1665846 dump.sql | tail -n + 12547 > resultat.sql

Explications

La commande head -n 1665846 permet de sortir les 1665846 premières lignes du fichier.
La commande tail -n +12547 (le + est important) permet d’afficher la fin du fichier, à partir de la ligne 12547.
On redirige ensuite notre résultat vers un nouveau fichier, qui sera prêt à être intégré.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.