Tengo un archivo cifrado como file.zip.gpg
.
El descifrado se realiza usando gpg --output file.zip --decrypt file.zip.gpg
y descomprimiendo el contenido del archivo 7z(a) x file.zip
después.
El primer comando obviamente crea un archivo (temporal). Me gustaría saber si ambos comandos se podrían combinar en un solo comando (¿tubería?) para evitar la creación del archivo temporal en el disco.
Lo intenté
gpg --decrypt file.zip.gpg | 7z x -si
pero las 7z
salidas aparecen antes de gpg
solicitar la frase de contraseña: Extracting archive: ERROR: Can not open the file as archive
.
Respuesta1
no etiquetastecremallera, pero el nombre del archivo contiene .zip
, así que supongo que después de descifrarlo es realmente un archivo zip.
Veresta respuesta:
El formato de archivo ZIP incluye un directorio (índice) al final del archivo. Este directorio indica dónde, dentro del archivo, se encuentra cada archivo y, por lo tanto, permite un acceso rápido y aleatorio, sin tener que leer todo el archivo.
Esto parece plantear un problema al intentar leer un archivo ZIP a través de una tubería, ya que no se accede al índice hasta el final y, por lo tanto, los miembros individuales no se pueden extraer correctamente hasta que el archivo se haya leído por completo y ya no esté disponible. . Como tal, no parece sorprendente que la mayoría de los descompresores ZIP simplemente fallen cuando el archivo se suministra a través de una tubería.
El directorio al final del archivo no es la única ubicación donde se almacena la metainformación del archivo. Además, las entradas individuales también incluyen esta información en un encabezado de archivo local, por motivos de redundancia.
Aunque no todos los descompresores ZIP utilizarán encabezados de archivos locales cuando el índice no esté disponible, las interfaces
tar
y (también conocidas como y ) pueden hacerlo y lo harán al leer a través de una tubería, […]cpio
libarchive
bsdtar
bsdcpio
En mi Debian 9 la solución con bsdtar
(del libarchive-tools
paquete) funciona:
gpg --decrypt file.zip.gpg | bsdtar -xvf-
Otras respuestas proporcionan otras soluciones. Algunos de ellos usan un archivo temporal disfrazado (por ejemplo, =( … )
en zsh), otros no (por ejemplo busybox unzip -
, pero este no funciona para mí).
Si el formato fuera 7z en lugar de zip, entonces el problema sería similar. Comparareste hilo:
Tratando de atravesar
7za
Estoy intentando ejecutar
7za
una canalización dentro de un programa C++. […]Lo mismo si intento hacerlo en la línea de comando.
7za e -an -si -so < filename.7z >/dev/null
ERROR: Can not open the file as archive E_NOTIMPL
La respuesta de Igor Pavlov (el creador de 7-zip) es:
7-zip necesita una operación de "búsqueda" para archivos 7z. Por lo tanto, no puede utilizarlo
-si
para extraer del archivo 7z.
Esto tiene fecha del 30 de marzo de 2016. mis pruebas yel registro de cambiosindique que la declaración sigue siendo válida en 2019. Además, bsdtar
en mi Debian no puedo ayudar, produce Error seeking in stdin
. supongo que el formato 7zen realidadnecesita un archivo buscable.