tldr;
使用printf
$ printf '\x50\x4b\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >empty.zip
$ md5sum empty.zip
76cdb2bad9582d23c1f6f4d868218d6c empty.zip
使用base64
$ base64 -d >empty.zip <<'EOF'
UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==
EOF
$ md5sum empty.zip
76cdb2bad9582d23c1f6f4d868218d6c empty.zip
说明
虽然zip 工具不支持创建空 zip 文件,但您可以创建一个非空 zip 文件,然后删除其内容:
$ touch foo.txt
$ zip empty.zip foo.txt
adding: foo.txt (stored 0%)
$ zip -d empty.zip foo.txt
deleting: foo.txt
zip warning: zip file empty
注意zipinfo 在给定结果empty.zip 时如何返回错误:
$ zipinfo empty.zip
Archive: empty.zip
Zip file size: 22 bytes, number of entries: 0
Empty zipfile.
$ echo $?
1
您可以确认empty.zip 具有预期的字节数:
$ file empty.zip
empty.zip: Zip archive data (empty)
$ xxd empty.zip
00000000: 504b 0506 0000 0000 0000 0000 0000 0000 PK..............
00000010: 0000 0000 0000 ......
您可以使用printf 将这 22 个字节(十六进制)直接写入文件:
$ printf '\x50\x4b\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >empty.zip
您还可以将这 22 个字节转换为 32 个 base64 编码的字符并使用它:
$ base64 <empty.zip
UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==