2010-03-04 6 views
12

J'essaie de trouver un moyen d'utiliser des tuyaux tar + sur un LTS Ubuntu Server.shell-scripting: Utiliser un tube comme entrée pour tar

J'ai une commande postgresql (pg_dump) qui émet beaucoup de sql sur la sortie standard:

pg_dump -U myUser myDB 

Je sais comment rediriger que dans un fichier:

pg_dump -U myUser myDB > myDB.sql 

Pour pour économiser de l'espace disque, je préfère l'avoir compressé: je peux faire un fichier tar.gz à partir de ce fichier myDB.sql, puis supprimer myDB.sql.

Mais je me demandais - est-il possible de le faire sans créer le fichier .sql intermédiaire? Je crois que cela pourrait être accompli avec des tuyaux ... mais je ne suis pas un gourou shell, et je sais très peu à leur sujet (je suis capable de faire ls | more, c'est tout). J'ai essayé plusieurs variantes de pg_dump .. | tar ... mais sans succès.

Comment puis-je utiliser un tube pour utiliser la sortie de pg_dump comme entrée pour tar? Ou est-ce que j'ai juste eu quelque chose de mal?

Répondre

29

Je ne vois pas comment "goudron" figure dans tout cela; pourquoi ne pas simplement compresser le fichier de vidage lui-même?

pg_dump -U myUser myDB | gzip > myDB.sql.gz 

Puis, à restaurer:

gzip -cd myDB.sql.gz | pg_restore ... 

Le « goudron » utilitaire est pour emmitoufler un tas de fichiers et répertoires dans un seul fichier (le nom est une contraction de « bande d'archive ») . À cet égard, un fichier "tar" est un peu comme un fichier "zip", sauf que "zip" implique toujours une compression alors que "tar" ne le fait pas.

Notez enfin que "gzip" n'est pas "zip". L'utilitaire "gzip" comprime juste; ça ne fait pas d'archives.

+0

ou 'zcat myDB.sql.gz | pg_restore ...' – vezult

+0

merci! réponse très informative! – kikito

+3

http://www.postgresql.org/docs/9.1/static/backup-dump.html Cette documentation vous donnera un aperçu complet de ce sujet –

2

tar ne compresse pas, ce que vous voulez est gzip ou un outil de compression similat

2

Tar prend les noms de fichiers en entrée. Vous voulez probablement juste gzip la sortie de pg_dump comme ceci:

pg_dump -U myUser myDB |gzip > myDB.sql.gz 
7

Dans votre cas d'utilisation pg_dump crée un seul fichier qui doit être comprimé. Comme d'autres l'ont laissé entendre, en * nix land, une archive est un fichier unique représentant un système de fichiers. Conformément à l'idéologie unix de un outil par tâche, la compression est une tâche distincte de l'archivage. Comme une archive est un fichier, elle peut être compressée, comme n'importe quel autre fichier. Par conséquent, puisque vous avez seulement besoin de compresser un seul fichier, tar n'est pas nécessaire comme d'autres l'ont déjà indiqué.

Cependant, votre titre et les balises apportera futurs lecteurs ici qui pourraient être les suivantes ... attendent


Disons que vous avez un dossier entier complet des sauvegardes PostgreSQL pour archiver et compresser. Cela devrait toujours être fait entièrement en utilisant tar, comme son -z ou --gzip drapeau invokes the gzip tool.Disons également que vous devez chiffrer vos archives de bases de données en vue de les déplacer vers une solution de sauvegarde hors site sécurisée de manière douteuse (telle qu'un magasin d'objets compatible S3). Supposons que vous aimiez le cryptage de jeton (mot de passe) pré-partagé en utilisant le chiffrement AES.

Cela serait une situation valide dans laquelle vous pourriez souhaiter acheminer des données vers et à partir de tar.

Archive -> Compresser -> Chiffrer

tar cz folder_to_encrypt | openssl enc -aes-256-cbc -e > out.tar.gz.enc 

Décrypter -> Décompresser -> Extrait

openssl enc -aes-256-cbc -in ./out.tar.gz.enc -d | tar xz --null 

ne se réfèrent aux GNU tar documentation pour details of how les --null œuvres du pavillon et des exemples plus utiles pour d'autres situations où vous pourriez avoir besoin de rediriger les fichiers vers tar.

Questions connexes