_file.Zip.gpg
_のような暗号化されたファイルがあります。
復号化は_gpg --output file.Zip --decrypt file.Zip.gpg
_を使用して行われ、その後7z(a) x file.Zip
を使用してアーカイブの内容を解凍します。
最初のコマンドは明らかに(一時)ファイルを作成します。ディスク上に一時ファイルが作成されないように、両方のコマンドを1つのコマンド(パイプ?)に組み合わせることができるかどうかを知りたいのですが。
私は試した
_gpg --decrypt file.Zip.gpg | 7z x -si
_
ただし、_7z
_の出力は、gpg
がパスフレーズ_Extracting archive: ERROR: Can not open the file as archive
_を要求する前に表示されます。
タグ付けしていません Zip ですが、ファイル名には_.Zip
_が含まれているため、復号化した後は実際にはZipファイルであると思います。
この回答 を参照してください:
Zipファイル形式には、アーカイブの最後にディレクトリ(インデックス)が含まれています。このディレクトリは、アーカイブ内のどこに各ファイルが配置されているかを示しているため、アーカイブ全体を読み取ることなく、すばやくランダムにアクセスできます。
これは、パイプを介してZipアーカイブを読み取ろうとすると問題が発生するように見えます。インデックスは最後までアクセスされないため、ファイルが完全に読み取られて使用できなくなるまで、個々のメンバーを正しく抽出できません。 。そのため、アーカイブがパイプを介して提供されると、ほとんどのZipデコンプレッサが単に失敗するのは当然のことです。
ファイルのメタ情報がアーカイブに保存される場所は、アーカイブの最後にあるディレクトリだけではありません。さらに、冗長性を確保するために、個々のエントリのローカルファイルヘッダーにもこの情報が含まれています。
インデックスが利用できない場合、すべてのZipデコンプレッサがローカルファイルヘッダーを使用するわけではありませんが、
tar
およびcpio
フロントエンドはlibarchive
(別名bsdtar
およびbsdcpio
)パイプを介して読み取るときにそうすることができ、そうするでしょう、[…]
私のDebian9では、bsdtar
(_libarchive-tools
_パッケージから)を使用したソリューションが機能します。
_gpg --decrypt file.Zip.gpg | bsdtar -xvf-
_
他の答えは他の解決策を提供します。それらのいくつかは、偽装して一時ファイルを使用します(たとえば、zshの=( … )
)、いくつかは使用しません(たとえば、_busybox unzip -
_ですが、これは私には機能しません)。
形式がZipではなく7zの場合、問題は同様になります。比較 このスレッド :
_
7za
_をパイプスルーしようとしていますC++プログラム内のパイプラインで_
7za
_を実行しようとしています。 […]コマンドラインで実行しようとしても同じです。
_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アーカイブに対して「シーク」操作を必要とします。したがって、_
-si
_を使用して7zアーカイブから抽出することはできません。
これは2016年3月30日付けでした。私のテストと changelog は、ステートメントが2019年でもまだ有効であることを示しています。さらに、私のDebianのbsdtar
は役に立たず、_Error seeking in stdin
_を生成します。 7z形式本当ににはシーク可能なファイルが必要だと思います。