除了压缩和解压缩文件外,你还可以使用 zip 命令执行许多有趣的操作。这是一些其他的 zip 选项以及它们如何提供帮助。
为了节省一些磁盘空间并将文件打包在一起进行归档,我们中的一些人已经在 Unix 和 Linux 系统上压缩文件数十年了。即使这样,并不是所有人都尝试过一些有趣的压缩工具的变体。因此,在本文中,我们将介绍标准的压缩和解压缩以及其他一些有趣的压缩选项。
基本的 zip 命令
首先,让我们看一下基本的 zip 命令。它使用了与 gzip 基本上相同的压缩算法,但是有一些重要的区别。一方面,gzip 命令仅用于压缩单个文件,而 zip 既可以压缩文件,也可以将多个文件结合在一起成为归档文件。另外,gzip 命令是“就地”压缩。换句话说,它会只留下一个压缩文件,而原始文件则没有了。 这是工作中的 gzip 示例:
$ gzip onefile
$ls-l
-rw-rw-r--1shs shs10514Jan1513:13onefile.gz
而下面是 zip。请注意,此命令要求为压缩存档提供名称,其中 gzip(执行压缩操作后)仅使用原始文件名并添加 .gz 扩展名。
$ zip twofiles.zipfile*
adding:file1(deflated82%)
adding:file2(deflated82%)
$ls-l
-rw-rw-r--1shs shs58021Jan1513:25file1
-rw-rw-r--1shs shs58933Jan1513:34file2
-rw-rw-r--1shs shs21289Jan1513:35twofiles.zip
请注意,原始文件仍位于原处。
所节省的磁盘空间量(即获得的压缩程度)将取决于每个文件的内容。以下示例中的变化很大。
$ zip mybin.zip~/bin/*
adding:bin/1(deflated26%)
adding:bin/append(deflated64%)
adding:bin/BoD_meeting(deflated18%)
adding:bin/cpuhog1(deflated14%)
adding:bin/cpuhog2(stored0%)
adding:bin/ff(deflated32%)
adding:bin/file.0(deflated1%)
adding:bin/loop(deflated14%)
adding:bin/notes(deflated23%)
adding:bin/patterns(stored0%)
adding:bin/runme(stored0%)
adding:bin/tryme(deflated13%)
adding:bin/tt(deflated6%)
unzip 命令
unzip 命令将从一个 zip 文件中恢复内容,并且,如你所料,原来的 zip 文件还保留在那里,而类似的 gunzip 命令将仅保留未压缩的文件。
$ unzip twofiles.zip
Archive:twofiles.zip
inflating:file1
inflating:file2
$ls-l
-rw-rw-r--1shs shs58021Jan1513:25file1
-rw-rw-r--1shs shs58933Jan1513:34file2
-rw-rw-r--1shs shs21289Jan1513:35twofiles.zip
zipcloak 命令
zipcloak 命令对一个 zip 文件进行加密,提示你输入两次密码(以确保你不会“胖手指”),然后将该文件原位存储。你可以想到,文件大小与原始文件会有所不同。
$ zipcloak twofiles.zip
Enterpassword:
Verifypassword:
encrypting:file1
encrypting:file2
$ls-l
total204
-rw-rw-r--1shs shs58021Jan1513:25file1
-rw-rw-r--1shs shs58933Jan1513:34file2
-rw-rw-r--1shs shs21313Jan1513:46twofiles.zip<==slightly larger than
unencrypted version
请记住,压缩包之外的原始文件仍处于未加密状态。
zipdetails 命令
zipdetails 命令将向你显示详细信息:有关压缩文件的详细信息,可能比你想象的要多得多。即使我们正在查看一个加密的文件,zipdetails 也会显示文件名以及文件修改日期、用户和组信息、文件长度数据等。请记住,这都是“元数据”。我们看不到文件的内容。
$ zipdetails twofiles.zip
0000LOCAL HEADER#104034B50
0004ExtractZipSpec14'2.0'
0005ExtractOS00'MS-DOS'
0006GeneralPurposeFlag0001
[Bit0]1'Encryption'
[Bits1-2]1'Maximum Compression'
0008CompressionMethod0008'Deflated'
000ALastModTime4E2F6B24'Tue Jan 15 13:25:08 2019'
000ECRC F1B115BD
0012CompressedLength00002904
0016UncompressedLength0000E2A5
001AFilenameLength0005
001CExtraLength001C
001EFilename'file1'
0023ExtraID#00015455'UT: Extended Timestamp'
0025Length0009
0027Flags'03 mod access'
0028ModTime5C3E2584'Tue Jan 15 13:25:08 2019'
002CAccessTime5C3E27BB'Tue Jan 15 13:34:35 2019'
0030ExtraID#00027875'ux: Unix Extra Type 3'
0032Length000B
0034Version01
0035UIDSize04
0036UID000003E8
003AGIDSize04
003BGID000003E8
003FPAYLOAD
2943LOCAL HEADER#204034B50
2947ExtractZipSpec14'2.0'
2948ExtractOS00'MS-DOS'
2949GeneralPurposeFlag0001
[Bit0]1'Encryption'
[Bits1-2]1'Maximum Compression'
294BCompressionMethod0008'Deflated'
294DLastModTime4E2F6C56'Tue Jan 15 13:34:44 2019'
2951CRC EC214569
2955CompressedLength00002913
2959UncompressedLength0000E635
295DFilenameLength0005
295FExtraLength001C
2961Filename'file2'
2966ExtraID#00015455'UT: Extended Timestamp'
2968Length0009
296AFlags'03 mod access'
296BModTime5C3E27C4'Tue Jan 15 13:34:44 2019'
296FAccessTime5C3E27BD'Tue Jan 15 13:34:37 2019'
2973ExtraID#00027875'ux: Unix Extra Type 3'
2975Length000B
2977Version01
2978UIDSize04
2979UID000003E8
297DGIDSize04
297EGID000003E8
2982PAYLOAD
5295CENTRAL HEADER#102014B50
5299CreatedZipSpec1E'3.0'
529ACreatedOS03'Unix'
529BExtractZipSpec14'2.0'
529CExtractOS00'MS-DOS'
529DGeneralPurposeFlag0001
[Bit0]1'Encryption'
[Bits1-2]1'Maximum Compression'
529FCompressionMethod0008'Deflated'
52A1LastModTime4E2F6B24'Tue Jan 15 13:25:08 2019'
52A5CRC F1B115BD
52A9CompressedLength00002904
52ADUncompressedLength0000E2A5
52B1FilenameLength0005
52B3ExtraLength0018
52B5CommentLength0000
52B7DiskStart0000
52B9IntFileAttributes0001
[Bit0]1TextData
52BBExtFileAttributes81B40000
52BFLocalHeaderOffset00000000
52C3Filename'file1'
52C8ExtraID#00015455'UT: Extended Timestamp'
52CALength0005
52CCFlags'03 mod access'
52CDModTime5C3E2584'Tue Jan 15 13:25:08 2019'
52D1ExtraID#00027875'ux: Unix Extra Type 3'
52D3Length000B
52D5Version01
52D6UIDSize04
52D7UID000003E8
52DBGIDSize04
52DCGID000003E8
52E0CENTRAL HEADER#202014B50
52E4CreatedZipSpec1E'3.0'
52E5CreatedOS03'Unix'
52E6ExtractZipSpec14'2.0'
52E7ExtractOS00'MS-DOS'
52E8GeneralPurposeFlag0001
[Bit0]1'Encryption'
[Bits1-2]1'Maximum Compression'
52EACompressionMethod0008'Deflated'
52ECLastModTime4E2F6C56'Tue Jan 15 13:34:44 2019'
52F0CRC EC214569
52F4CompressedLength00002913
52F8UncompressedLength0000E635
52FCFilenameLength0005
52FEExtraLength0018
5300CommentLength0000
5302DiskStart0000
5304IntFileAttributes0001
[Bit0]1TextData
5306ExtFileAttributes81B40000
530ALocalHeaderOffset00002943
530EFilename'file2'
5313ExtraID#00015455'UT: Extended Timestamp'
5315Length0005
5317Flags'03 mod access'
5318ModTime5C3E27C4'Tue Jan 15 13:34:44 2019'
531CExtraID#00027875'ux: Unix Extra Type 3'
531ELength000B
5320Version01
5321UIDSize04
5322UID000003E8
5326GIDSize04
5327GID000003E8
532BENDCENTRAL HEADER06054B50
532FNumberofthisdisk0000
5331CentralDirDiskno0000
5333Entriesinthisdisk0002
5335TotalEntries0002
5337SizeofCentralDir00000096
533BOffsettoCentralDir00005295
533FCommentLength0000
Done
zipgrep命令
zipgrep 命令将使用 grep 类的功能来找到压缩文件中的特定内容。如果文件已加密,则需要为要检查的每个文件输入为加密所提供的密码。如果只想检查归档文件中单个文件的内容,请将其名称添加到 zipgrep 命令的末尾,如下所示。
$ zipgrep hazard twofiles.zip file1
[twofiles.zip]file1 password:
Certainpesticides should be banned since they are hazardous to the environment.
zipinfo 命令
zipinfo 命令提供有关压缩文件内容的信息,无论是否加密。这包括文件名、大小、日期和权限。
$ zipinfo twofiles.zip
Archive:twofiles.zip
Zipfilesize:21313bytes,number of entries:2
-rw-rw-r--3.0unx58021TxdefN19-Jan-1513:25file1
-rw-rw-r--3.0unx58933TxdefN19-Jan-1513:34file2
2files,116954bytes uncompressed,20991bytes compressed:82.1%
zipnote 命令
zipnote 命令可用于从 zip 归档中提取注释或添加注释。要显示注释,只需在命令前面加上归档名称即可。如果之前未添加任何注释,你将看到类似以下内容:
$ zipnote twofiles.zip
@file1
@(comment abovethisline)
@file2
@(comment abovethisline)
@(zipfilecomment belowthisline)
如果要添加注释,请先将 zipnote 命令的输出写入到文件:
$ zipnote twofiles.zip>comments
接下来,编辑你刚刚创建的文件,将注释插入到 (comment above this line) 行上方。然后使用像这样的 zipnote 命令添加注释:
$ zipnote-wtwofiles.zip
zipsplit 命令
当归档文件太大时,可以使用 zipsplit 命令将一个 zip 归档文件分解为多个 zip 归档文件,这样你就可以将其中某一个文件放到小型 U 盘中。最简单的方法似乎是为每个部分的压缩文件指定最大大小,此大小必须足够大以容纳最大的所包含的文件。
$ zipsplit-n12000twofiles.zip
2zip files will be made(100%efficiency)
creating:twofile1.zip
creating:twofile2.zip
$lstwofile*.zip
-rw-rw-r--1shs shs10697Jan1514:52twofile1.zip
-rw-rw-r--1shs shs10702Jan1514:52twofile2.zip
-rw-rw-r--1shs shs21377Jan1514:27twofiles.zip
请注意,提取的文件是如何依次命名为 twofile1 和 twofile2 的。
总结
zip 命令及其一些压缩工具变体,对如何生成和使用压缩文件归档提供了很多控制。
【编辑推荐】
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0