- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 Debian 稳定平台中的 zip
和 zipnote
程序(均为 3.0 版本)遇到了一个烦人的问题。
我希望创建一个 zip 存档,存储(不压缩)来自标准输入的数据,无需额外的属性/字段,并为 zip 文件内的结果文件命名。
我的第一次尝试是
printf "foodata" | zip -X0 bar.zip -
printf "@ -\n@=foofile\n" | zipnote -w bar.zip
其中 zip
创建一个 bar.zip
存档,其中存储的文件 "-"
包含 "foodata"
,并且 zipnote
将文件从 "-"
重命名为 "foofile"
。
第一个问题(已解决):zip
,正如我们从zipdetails
中看到的
001E Filename '-'
001F Extra ID #0001 0001 'ZIP64'
0021 Length 0010
0023 Uncompressed Size 0000000000000007
002B Compressed Size 0000000000000007
从标准输入接收数据,不知道结果文件的大小,因此使用 Zip64
扩展名创建一个 PKZIP 4.5 兼容的 zip
存档(可以超过 4 GB),并向文件添加 Zip64
额外属性。
-X
选项会删除额外文件属性但不会删除 Zip64
额外字段。
添加 -fz-
选项即可轻松解决此问题,如 zip
手册页中所述
// .................................VVVV
printf "foodata" | zip -X0 -fz- bar.zip -
现在 bar.zip
是 PKZIP 2 兼容文件,并且没有 Zip64
额外字段。
第二个问题(未解决):zipnote
更改所包含文件的名称并将Zip64
字段添加到文件中。
不知道为什么。
根据 zip
手册页
zip
removes the Zip64 extensions if not needed when archive entries are copied (see the-U
(--copy
) option).
所以我明白了
zip bar.zip --out bar-corrected.zip
应该创建一个新的bar- Corrected.zip
存档,其中文件foofile
Zip64是免费的(
foofile非常短,因此我认为不需要
Zip64`扩展名)。
不幸的是,这不起作用:我收到警告
copying: foofile
zip warning: Local Version Needed To Extract does not match CD: foofile
生成的文件保留 Zip64
扩展名。
似乎解释文件名或添加 -fz-
选项不起作用:我尝试了很多组合,但(也许是我的错)没有成功。
问题:
(1) 我可以避免(以及如何)zipnote
、更改文件名、向其中添加 Zip64
字段吗?
(2) 否则,如何使用 zip
(使用 --copy
?使用 -fz-
?)来创建一个新的 zip
存档 Zip64
免费扩展?
最佳答案
[编辑:更新为使用 Store 而不是 Deflate]
不确定如何使用 zip
和 zipnote
实现您想要的效果,但这里有一个替代方案。
回显 abc | perl -MIO::Compress::Zip=zip -e ' zip "-"=> "out.zip", Method => 0, Name => "member.txt"'
$ unzip -lv out.zip
Archive: out.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
4 Stored 4 0% 2019-10-10 21:54 4788814e member.txt
-------- ------- --- -------
4 4 0% 1 file
zip 文件中不存在 Zip64 或额外属性。
$ zipdetails out.zip
0000 LOCAL HEADER #1 04034B50
0004 Extract Zip Spec 14 '2.0'
0005 Extract OS 00 'MS-DOS'
0006 General Purpose Flag 0008
[Bit 3] 1 'Streamed'
0008 Compression Method 0000 'Stored'
000A Last Mod Time 4F4AAECA 'Thu Oct 10 21:54:20 2019'
000E CRC 00000000
0012 Compressed Length 00000000
0016 Uncompressed Length 00000000
001A Filename Length 000A
001C Extra Length 0000
001E Filename 'member.txt'
0028 PAYLOAD abc.
002C STREAMING DATA HEADER 08074B50
0030 CRC 4788814E
0034 Compressed Length 00000004
0038 Uncompressed Length 00000004
003C CENTRAL HEADER #1 02014B50
0040 Created Zip Spec 14 '2.0'
0041 Created OS 03 'Unix'
0042 Extract Zip Spec 14 '2.0'
0043 Extract OS 00 'MS-DOS'
0044 General Purpose Flag 0008
[Bit 3] 1 'Streamed'
0046 Compression Method 0000 'Stored'
0048 Last Mod Time 4F4AAECA 'Thu Oct 10 21:54:20 2019'
004C CRC 4788814E
0050 Compressed Length 00000004
0054 Uncompressed Length 00000004
0058 Filename Length 000A
005A Extra Length 0000
005C Comment Length 0000
005E Disk Start 0000
0060 Int File Attributes 0000
[Bit 0] 0 'Binary Data'
0062 Ext File Attributes 81A40000
0066 Local Header Offset 00000000
006A Filename 'member.txt'
0074 END CENTRAL HEADER 06054B50
0078 Number of this disk 0000
007A Central Dir Disk no 0000
007C Entries in this disk 0001
007E Total Entries 0001
0080 Size of Central Dir 00000038
0084 Offset to Central Dir 0000003C
0088 Comment Length 0000
Done
关于linux - 问题,与 Zip4 扩展名、将标准输入内容定向到 zip 存档、使用 zip 以及使用 zipnotes 更改压缩文件名相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58331198/
我最近在读 CSAPP。在 10.9 节中,它说标准 I/O 不应该与 socket 一起使用,原因如下: (1) The restrictions of standard I/O Restricti
似乎是一个足够标准的问题,可以保证解决方案中的标准设计: 假设我想在文件中写入 x+2(或更少)个字符串。 x 字符串构成一个部分的内容,这两个字符串构成该部分的页眉和页脚。要注意的是,如果内容中没有
代码版本管理 在项目中,代码的版本管理非常重要。每个需求版本的代码开发在版本控制里都应该经过以下几个步骤。 在master分支中拉取该需求版本的两个分支,一个feature分支,
我有以下sql查询,我需要获取相应的hibernate条件查询 SELECT COUNT(DISTINCT employee_id) FROM erp_hr_payment WHERE payment
所以我正在编写一些代码,并且最近遇到了实现一些 mixin 的需要。我的问题是,设计混音的正确方法是什么?我将使用下面的示例代码来说明我的确切查询。 class Projectile(Movable,
我的环境变量包含如下双引号: $echo $CONNECT_SASL_JAAS_CONFIG org.apache.kafka.common.security.plain.PlainLoginModu
示例: /** * This function will determine whether or not one string starts with another string. * @pa
有没有办法在 Grails 中做一个不区分大小写的 in 子句? 我有这个: "in"("name", filters.tags) 我希望它忽略大小写。我想我可以做一个 sqlRestriction
我搜索了很长时间,以查找将哪些boost库添加到std库中,但是我只找到了一个新库的完整列表(如此处:http://open-std.org/jtc1/sc22/wg21/docs/library_t
我已经通过使用这个肮脏的黑客解决了我的问题: ' Filter managerial functions ActiveSheet.Range("$A$1:$BW$2211").Auto
因此,我很难理解我需要遵循的标准,以便我的 Java 程序能够嵌入 HTML。我是否只需将我的主类扩展到 Applet 类,或者我还需要做更多的事情吗?另外,在我见过的每个 Applet 示例中,它都
我对在 Hibernate 中使用限制有疑问。 我必须创建条件,设置一些限制,然后选择日期字段最大值的记录: Criteria query = session.createCriteria(Stora
我有标准: ICriteria criteria = Session.CreateCriteria() .SetFetchMode("Entity1", FetchMo
我很难编写条件来选择所有子集合或孙集合为空的实体。我可以将这些作为单独的条件来执行,但我无法将其组合成一个条件。 类结构: public class Component { p
@Entity class A { @ManyToMany private List list; ... } @Entity class B { ... } 我想使用条件(不是 sql 查询)从 A
我的数据库中有以下表结构: Table A: Table B: Table C: _______________
请帮助我: 我有下一张 table : 单位 ID 姓名 用户 ID 姓名 利率 单位 ID 用户 ID 我不明白如何从 SQL 创建正确的条件结构: 代码: SELECT * FROM Unit W
我正在构建一个包含项目的网站,每个项目都有一个页面,例如: website.com/book/123 website.com/film/456 website.com/game/789 每个项目都可以
我需要使用两个属性的组合来过滤结果列表。一个简单的 SQL 语句如下所示: SELECT TOP 10 * FROM Person WHERE FirstName + ' ' + LastName L
我有一个“ super 实体”SuperEntity 和三个扩展父类(super class)的实体 ChildEntity1、...、ChildEntity3。 搜索数据库中的所有实体很容易,即我们
我是一名优秀的程序员,十分优秀!