¿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).

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 ...

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)

¿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@


-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)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.