ストリーミングテキストを圧縮し、後で解凍しようとしています。最小限の例は次のとおりです。
echo "Hey, could you Zip this for me?" | Zip hello.Zip - ; unzip -p hello.Zip
これは失敗し、次の出力が表示されます。
warning [hello.Zip]: 76 extra bytes at beginning or within zipfile
(attempting to process anyway)
error [hello.Zip]: reported length of central directory is
-76 bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1
zipfile?). Compensating...
skipping: - need PK compat. v4.5 (can do v2.1)
note: didn't find end-of-central-dir signature at end of central dir.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
これはバイナリモードに関するメモと関係があると思いますが、何がわからないか、関連するマニュアルページ/ Google/StackExchangeでヘルプを見つけることができません。この質問は「 ファイルを解凍するときの余分なバイトエラー。 」とは異なると思います。エラーメッセージは同じですが、その質問は修正に関するものです。既存のサードパーティのファイルアーカイブ。これは、自分で作成したばかりのアーカイブを操作するためのものです。
バージョンの詳細:
コメントによると、私はこの回答の下部でこれを確認しました。
問題は、ストリーミングZipがデフォルトでZip64形式になることですが、Zip64を読み取るには6以降の解凍が必要だと思います。マニュアルには-fz-
は、Zip64の使用を防ぐために入力が4 GBより小さいことがわかっている場合に使用できますが、そのマニュアルの他の場所には明確に記載されていません。
Zipマニュアルのように、unzipからの警告の「(確認してください...」の部分[以下を参照]で示唆されているように、4GB未満のZipバイナリ形式を強制すると、基本的にZipステップの追加出力で機能します。
Daniels-Mini:~ dlamblin$ echo "Hey, could you Zip this for me?" | Zip -fz- hello.Zip - ; unzip -p hello.Zip
updating: - (stored 0%)
Hey, could you Zip this for me?
Zipはフィルターのようにパイプでつなぐことができますが、echo a|Zip|cat
unzipはstdinで機能しないため、すでに不一致があります。奇妙なことにecho a|Zip a.Zip -
およびecho a|Zip>b.Zip
同じサイズの異なるファイルを生成します。それは私を混乱させました。
ストリームをフィルターとして解凍するには、funzip
があります。残念ながら、互換性のあるバージョンのfunzipもMac OS X10.6にデフォルトでインストールされていません。
Daniels-Mini:~ dlamblin$ echo "Hey, could you Zip this for me?" | Zip |funzip
adding: - (deflated -5%)
Hey, could you Zip this for me?
funzip error: invalid compressed data--length error
Daniels-Mini:~ dlamblin$ echo "Hey, could you Zip this for me?" | Zip -fz-|funzip
adding: - (deflated -5%)
Hey, could you Zip this for me?
問題の確認は次のとおりです。
Last login: Mon Aug 3 22:54:02 on ttys010
Daniels-Mini:~ dlamblin$ echo "Hey, could you Zip this for me?" | Zip hello.Zip - ; unzip -p hello.Zip
adding: - (stored 0%)
warning [hello.Zip]: 76 extra bytes at beginning or within zipfile
(attempting to process anyway)
error [hello.Zip]: reported length of central directory is
-76 bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1
zipfile?). Compensating...
note: didn't find end-of-central-dir signature at end of central dir.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
Daniels-Mini:~ dlamblin$ Zip --version
Copyright (c) 1990-2008 Info-Zip - Type 'Zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-Zip.
Currently maintained by E. Gordon. Please send bug reports to
the authors using the web page at www.info-Zip.org; see README for details.
Latest sources and executables are at ftp://ftp.info-Zip.org/pub/infozip,
as of above date; see http://www.info-Zip.org/ for other sites.
Compiled with gcc 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39) for Unix (Mac OS X) on Apr 30 2015.
Zip special compilation options:
USE_EF_UT_TIME (store Universal Time)
SYMLINK_SUPPORT (symbolic links supported)
LARGE_FILE_SUPPORT (can read and write large files on file system)
Zip64_SUPPORT (use Zip64 to store large files in archives)
STORE_UNIX_UIDs_GIDs (store UID/GID sizes/values using new extra field)
UIDGID_16BIT (old Unix 16-bit UID/GID extra field also used)
[encryption, version 2.91 of 05 Jan 2007] (modified for Zip 3)
Encryption notice:
The encryption code of this program is not copyrighted and is
put in the public domain. It was originally written in Europe
and, to the best of our knowledge, can be freely distributed
in both source and object forms from any country, including
the USA under License Exception TSU of the U.S. Export
Administration Regulations (section 740.13(e)) of 6 June 2002.
Zip environment options:
Zip: [none]
ZIPOPT: [none]
Daniels-Mini:~ dlamblin$ unzip --version
caution: both -n and -o specified; ignoring -o
UnZip 5.52 of 28 February 2005, by Info-Zip. Maintained by C. Spieler. Send
bug reports using http://www.info-Zip.org/Zip-bug.html; see README for details.
Usage: unzip [-Z] [-opts[modifiers]] file[.Zip] [list] [-x xlist] [-d exdir]
Default action is to extract files in list, except those in xlist, to exdir;
file[.Zip] may be a wildcard. -Z => ZipInfo mode ("unzip -Z" for usage).
-p extract files to pipe, no messages -l list files (short format)
-f freshen existing files, create none -t test compressed archive data
-u update files, create if necessary -z display archive comment
-x exclude files that follow (in xlist) -d extract files into exdir
modifiers: -q quiet mode (-qq => quieter)
-n never overwrite existing files -a auto-convert any text files
-o overwrite files WITHOUT prompting -aa treat ALL files as text
-j junk paths (do not make directories) -v be verbose/print version info
-C match filenames case-insensitively -L make (some) names lowercase
-X restore UID/GID info -V retain VMS version numbers
-K keep setuid/setgid/tacky permissions -M pipe through "more" pager
Examples (see unzip.txt for more info):
unzip data1 -x joe => extract all files except joe from zipfile data1.Zip
unzip -p foo | more => send contents of foo.Zip via pipe into program more
unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer