¿Cómo usar 7z para comprimir a través de una tubería?

16

Estoy usando esto para crear copias de seguridad de forma segura (¿es realmente seguro con una buena contraseña?):

# ENCRYPT
ORIGDIR="DIRECTORYNAMEHERE"; tar cvf - "${ORIGDIR}/" 2>/dev/null | gzip -9 - 2>/dev/null | openssl aes-256-cbc -salt -out "${ORIGDIR}.tar.gz.aes"

# DECRYPT
openssl aes-256-cbc -d -salt -in "ENCDIRECTORYNAMEHERE" | tar -xz -f -

P: ¿Pero cómo puedo hacer esto usando 7z con una tasa de compresión máxima?

Crear archivos temporales además del único archivo OUTPUT no es bueno, porque si necesito comprimir archivos / directorios de ~ 100 GByte en un FS de 180 GBy no tendría suficiente espacio libre (si, por ejemplo, el archivo comprimido tomaría ~ 60 GByte).

Gasko Peter
fuente

Respuestas:

6

¿Hay alguna razón por la que quieras usar 7zespecíficamente, o simplemente quieres una mejor compresión gzip?

La xzutilidad utiliza el mismo algoritmo de compresión que 7z(LZMA) y permite la compresión canalizada igual que gzip.

tar cvf ... | xz -9 | openssl ...
David Baggerman
fuente
La razón por la que personalmente necesitaba específicamente 7z es la capacidad de
dividirme en
1
xz no era multiproceso en ese momento (puede que aún no lo sea), por lo que en una computadora de varios núcleos podría ser mucho más lento que 7z
Xen2050
25

Esto está cubierto en la página de manual de 7z:

-si    Read data from StdIn (eg: tar cf - directory | 7z a -si directory.tar.7z)
Wieland
fuente
¿Puedo poner un "|" y procesarlo después del 7z?
Gasko Peter
44
Puede usar -sopara volcar los datos comprimidos en stdout en lugar de un archivo.
Wieland
1

Para crear rápidamente un archivo de preparación de copia de seguridad remota de todos mis scripts de inicio, uso lo siguiente:

# Scripts backup
ls ~/*.sh | cpio -ov | 7z a -si ~/Documents/SCRIPT_BACKUP_30062017.cpio.7z
# Scripts restore
7z x -so ~/Documents/SCRIPT_BACKUP_30062017.cpio.7z | cpio -iv   

La razón por la que no hago una copia de seguridad de mi raíz 'home' es que específicamente sincronizo y envío solo algunos directorios. Observe cómo cpio se saltará y buscará nuevos archivos existentes en la restauración. Esto es poderoso Su trabajo no se sobrescribirá.

brote@

Will Budic
fuente
-1

solo lo tengo para trabajar, postgres pgdumpalla un archivo 7zip: usar set pgpassword=xxxxxantes de emitir el comando:

pg_dumpall -U postgres | c:\"program files"\7-Zip\7z.exe a -si e:\directory\output.file.sqlc

¡solo tomó 4 días descargarlo y comprimirlo! 50201104790 bytes (47GB)

klmbear
fuente