2010-03-04 15 views
12

Estoy tratando de encontrar una forma de utilizar tar + pipes en Ubuntu Server LTS.shell-scripting: Use una tubería como entrada para tar

Tengo un comando de PostgreSQL (pg_dump) que da salida a una gran cantidad de sql en la salida estándar:

pg_dump -U myUser myDB 

sé cómo redirigir a un archivo que:

pg_dump -U myUser myDB > myDB.sql 

Con el fin para ahorrar algo de espacio en disco, preferiría tenerlo comprimido: puedo hacer un archivo tar.gz desde ese myDB.sql, y luego eliminar myDB.sql.

Pero me preguntaba: ¿hay alguna forma de hacerlo sin crear el archivo intermedio .sql? Creo que esto podría lograrse con tuberías ... sin embargo, no soy un gurú de shell, y sé muy poco acerca de ellos (soy capaz de hacer ls | more, eso es todo). He intentado varias variaciones de pg_dump .. | tar ... pero sin éxito.

¿Cómo puedo usar una tubería para usar la salida pg_dump como entrada para alquitrán? ¿O acabo de obtener algo mal?

Respuesta

29

No veo cómo figura el "alquitrán" en esto; ¿por qué no comprimir el archivo de volcado en sí?

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

Entonces, para restaurar:

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

El "alquitrán" utilidad es para abrigarse un montón de archivos y directorios en un solo archivo (el nombre es una contracción de "archivo de cinta") . En ese sentido, un archivo "tar" es similar a un archivo "zip", excepto que "zip" siempre implica compresión, mientras que "tar" no lo hace.

Note finalmente que "gzip" no es "zip". La utilidad "gzip" solo comprime; no hace archivos

+0

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

+0

gracias! respuesta muy informativa! – kikito

+3

http://www.postgresql.org/docs/9.1/static/backup-dump.html Esta documentación le dará una visión general sobre este tema –

2

tar no comprime, lo que quiere es gzip o una herramienta de compresión similat

2

Tar lleva los nombres de archivo como entrada. Es probable que desea es gzip la salida pg_dump así:

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

En el caso de uso pg_dump crea un solo archivo que necesita ser comprimido. Como otros han insinuado, en * nix land un archivo es un archivo único que representa un sistema de archivos. De acuerdo con la ideología de Unix de una herramienta por tarea, la compresión es una tarea separada del archivo. Como un archivo es un archivo, se puede comprimir, como cualquier otro archivo. Por lo tanto, dado que solo necesita comprimir un solo archivo, tar no es necesario ya que otros ya han señalado correctamente.

Sin embargo, su título y etiquetas traerá futuros lectores de aquí que podría estar esperando el siguiente ...


Digamos que usted tiene toda una carpeta llena de copias de seguridad de PostgreSQL para archivar y comprimir. Esto todavía se debe hacer completamente usando tar, como su -z o --gzip marca invokes the gzip tool.

Digamos que también necesita encriptar los archivos de su base de datos como preparación para moverlos a una solución de respaldo externamente segura (como una tienda de objetos compatible con S3). Y supongamos que le gusta el cifrado de token precompartido (contraseña) con el cifrado AES.

Esta sería una situación válida en la que es posible que desee canalizar datos desde y hacia tar.

Archivo -> Comprimir -> Cifrar

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

Descifrar -> Descomprimir -> Extracto de

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

hacen referencia a los GNU tar documentation para details of how las obras --null bandera y ejemplos más útiles para otras situaciones donde podría necesitar pasar los archivos a tar.

Cuestiones relacionadas