파일 복호화 및 압축 풀기 결합

파일 복호화 및 압축 풀기 결합

와 같은 암호화된 파일이 있습니다 file.zip.gpg.

gpg --output file.zip --decrypt file.zip.gpg이후에 아카이브 내용을 사용하고 압축을 푸는 방식으로 암호 해독이 수행됩니다 7z(a) x file.zip.

첫 번째 명령은 분명히 (임시) 파일을 생성합니다. 디스크에 임시 파일이 생성되는 것을 방지하기 위해 두 명령을 단일 명령(파이프?)으로 결합할 수 있는지 알고 싶습니다.

나는 노력했다

gpg --decrypt file.zip.gpg | 7z x -si

그러나 암호 문구를 요청하기 7z전에 출력이 나타납니다 .gpgExtracting archive: ERROR: Can not open the file as archive

답변1

태그하지 않으셨어요, 그러나 파일 이름에는 가 포함되어 있으므로 .zip해독한 후에는 실제로 zip 파일이라고 가정합니다.

보다이 답변:

ZIP 파일 형식에는 아카이브 끝에 디렉터리(색인)가 포함됩니다. 이 디렉토리는 아카이브 내에서 각 파일이 있는 위치를 알려주므로 전체 아카이브를 읽지 않고도 빠르고 무작위로 액세스할 수 있습니다.

이는 파이프를 통해 ZIP 아카이브를 읽으려고 할 때 인덱스가 끝까지 액세스되지 않아 파일을 완전히 읽을 때까지 개별 구성원을 올바르게 추출할 수 없고 더 이상 사용할 수 없다는 점에서 문제를 일으키는 것으로 보입니다. . 따라서 아카이브가 파이프를 통해 제공될 때 대부분의 ZIP 압축 해제기가 단순히 실패하는 것은 놀라운 일이 아닙니다.

아카이브 끝에 있는 디렉터리는 파일 메타 정보가 아카이브에 저장되는 유일한 위치가 아닙니다. 또한 중복성을 위해 개별 항목에는 이 정보가 로컬 파일 헤더에 포함됩니다.

인덱스를 사용할 수 없을 때 모든 ZIP 압축 해제기가 로컬 파일 헤더를 사용하는 것은 아니지만, tarcpio프런트 엔드 libarchive(일명 bsdtarbsdcpio)는 파이프를 통해 읽을 때 그렇게 할 수 있고 그렇게 할 것입니다. […

bsdtar내 Debian 9에서는 ( libarchive-tools패키지에서) 솔루션이 작동합니다.

gpg --decrypt file.zip.gpg | bsdtar -xvf-

다른 답변은 다른 솔루션을 제공합니다. 그들 중 일부는 변장한 임시 파일을 사용하고(예: =( … )zsh) 일부는 그렇지 않습니다(예 busybox unzip -: 그러나 이것은 나에게 작동하지 않습니다).


형식이 zip이 아닌 7z라면 문제는 비슷할 것입니다. 비교하다이 스레드:

파이프를 통해 시도하는 중7za

7zaC++ 프로그램 내의 파이프라인에서 실행하려고 합니다 . […]

명령줄에서 수행하려고 해도 마찬가지입니다.

7za e -an -si -so < filename.7z >/dev/null
ERROR:
Can not open the file as archive

E_NOTIMPL

Igor Pavlov(7-zip 작성자)의 답변은 다음과 같습니다.

7-zip에는 7z 아카이브에 대한 "검색" 작업이 필요합니다. 따라서 -si7z 아카이브에서 추출하는 데 사용할 수 없습니다 .

이 날짜는 2016-03-30입니다. 내 테스트와변경 내역이 진술이 2019년에도 여전히 유효하다는 것을 나타냅니다. 게다가 bsdtar내 데비안에서는 도움이 될 수 없으며 Error seeking in stdin. 7z 포맷인거 같은데정말검색 가능한 파일이 필요합니다.

관련 정보