在 Linux 上壓縮檔案:zip 命令的各種變體及用法
| 2020-02-21 12:08
除了壓縮和解壓縮檔案外,你還可以使用 zip 命令執行許多有趣的操作。這是一些其他的 zip 選項以及它們如何提供幫助。
為了節省一些磁碟空間並將檔案打包在一起進行歸檔,我們中的一些人已經在 Unix 和 Linux 系統上壓縮檔案數十年了。即使這樣,並不是所有人都嘗試過一些有趣的壓縮工具的變體。因此,在本文中,我們將介紹標準的壓縮和解壓縮以及其他一些有趣的壓縮選項。
基本的 zip 命令
首先,讓我們看一下基本的 zip
命令。它使用了與 gzip
基本上相同的壓縮演算法,但是有一些重要的區別。一方面,gzip
命令僅用於壓縮單個檔案,而 zip
既可以壓縮檔案,也可以將多個檔案結合在一起成為歸檔檔案。另外,gzip
命令是“就地”壓縮。換句話說,它會只留下一個壓縮檔案,而原始檔案則沒有了。 這是工作中的 gzip
示例:
$ gzip onefile
$ ls -l
-rw-rw-r-- 1 shs shs 10514 Jan 15 13:13 onefile.gz
而下面是 zip
。請注意,此命令要求為壓縮存檔提供名稱,其中 gzip
(執行壓縮操作後)僅使用原始檔名並新增 .gz
副檔名。
$ zip twofiles.zip file*
adding: file1 (deflated 82%)
adding: file2 (deflated 82%)
$ ls -l
-rw-rw-r-- 1 shs shs 58021 Jan 15 13:25 file1
-rw-rw-r-- 1 shs shs 58933 Jan 15 13:34 file2
-rw-rw-r-- 1 shs shs 21289 Jan 15 13:35 twofiles.zip
請注意,原始檔案仍位於原處。
所節省的磁碟空間量(即獲得的壓縮程度)將取決於每個檔案的內容。以下示例中的變化很大。
$ zip mybin.zip ~/bin/*
adding: bin/1 (deflated 26%)
adding: bin/append (deflated 64%)
adding: bin/BoD_meeting (deflated 18%)
adding: bin/cpuhog1 (deflated 14%)
adding: bin/cpuhog2 (stored 0%)
adding: bin/ff (deflated 32%)
adding: bin/file.0 (deflated 1%)
adding: bin/loop (deflated 14%)
adding: bin/notes (deflated 23%)
adding: bin/patterns (stored 0%)
adding: bin/runme (stored 0%)
adding: bin/tryme (deflated 13%)
adding: bin/tt (deflated 6%)
unzip 命令
unzip
命令將從一個 zip 檔案中恢復內容,並且,如你所料,原來的 zip 檔案還保留在那裡,而類似的 gunzip
命令將僅保留未壓縮的檔案。
$ unzip twofiles.zip
Archive: twofiles.zip
inflating: file1
inflating: file2
$ ls -l
-rw-rw-r-- 1 shs shs 58021 Jan 15 13:25 file1
-rw-rw-r-- 1 shs shs 58933 Jan 15 13:34 file2
-rw-rw-r-- 1 shs shs 21289 Jan 15 13:35 twofiles.zip
zipcloak 命令
zipcloak
命令對一個 zip 檔案進行加密,提示你輸入兩次密碼(以確保你不會“胖手指”),然後將該檔案原位儲存。你可以想到,檔案大小與原始檔案會有所不同。
$ zipcloak twofiles.zip
Enter password:
Verify password:
encrypting: file1
encrypting: file2
$ ls -l
total 204
-rw-rw-r-- 1 shs shs 58021 Jan 15 13:25 file1
-rw-rw-r-- 1 shs shs 58933 Jan 15 13:34 file2
-rw-rw-r-- 1 shs shs 21313 Jan 15 13:46 twofiles.zip <== slightly larger than
unencrypted version
請記住,壓縮包之外的原始檔案仍處於未加密狀態。
zipdetails 命令
zipdetails
命令將向你顯示詳細資訊:有關壓縮檔案的詳細資訊,可能比你想象的要多得多。即使我們正在檢視一個加密的檔案,zipdetails
也會顯示檔名以及檔案修改日期、使用者和組資訊、檔案長度資料等。請記住,這都是“後設資料”。我們看不到檔案的內容。
$ zipdetails twofiles.zip
0000 LOCAL HEADER #1 04034B50
0004 Extract Zip Spec 14 '2.0'
0005 Extract OS 00 'MS-DOS'
0006 General Purpose Flag 0001
[Bit 0] 1 'Encryption'
[Bits 1-2] 1 'Maximum Compression'
0008 Compression Method 0008 'Deflated'
000A Last Mod Time 4E2F6B24 'Tue Jan 15 13:25:08 2019'
000E CRC F1B115BD
0012 Compressed Length 00002904
0016 Uncompressed Length 0000E2A5
001A Filename Length 0005
001C Extra Length 001C
001E Filename 'file1'
0023 Extra ID #0001 5455 'UT: Extended Timestamp'
0025 Length 0009
0027 Flags '03 mod access'
0028 Mod Time 5C3E2584 'Tue Jan 15 13:25:08 2019'
002C Access Time 5C3E27BB 'Tue Jan 15 13:34:35 2019'
0030 Extra ID #0002 7875 'ux: Unix Extra Type 3'
0032 Length 000B
0034 Version 01
0035 UID Size 04
0036 UID 000003E8
003A GID Size 04
003B GID 000003E8
003F PAYLOAD
2943 LOCAL HEADER #2 04034B50
2947 Extract Zip Spec 14 '2.0'
2948 Extract OS 00 'MS-DOS'
2949 General Purpose Flag 0001
[Bit 0] 1 'Encryption'
[Bits 1-2] 1 'Maximum Compression'
294B Compression Method 0008 'Deflated'
294D Last Mod Time 4E2F6C56 'Tue Jan 15 13:34:44 2019'
2951 CRC EC214569
2955 Compressed Length 00002913
2959 Uncompressed Length 0000E635
295D Filename Length 0005
295F Extra Length 001C
2961 Filename 'file2'
2966 Extra ID #0001 5455 'UT: Extended Timestamp'
2968 Length 0009
296A Flags '03 mod access'
296B Mod Time 5C3E27C4 'Tue Jan 15 13:34:44 2019'
296F Access Time 5C3E27BD 'Tue Jan 15 13:34:37 2019'
2973 Extra ID #0002 7875 'ux: Unix Extra Type 3'
2975 Length 000B
2977 Version 01
2978 UID Size 04
2979 UID 000003E8
297D GID Size 04
297E GID 000003E8
2982 PAYLOAD
5295 CENTRAL HEADER #1 02014B50
5299 Created Zip Spec 1E '3.0'
529A Created OS 03 'Unix'
529B Extract Zip Spec 14 '2.0'
529C Extract OS 00 'MS-DOS'
529D General Purpose Flag 0001
[Bit 0] 1 'Encryption'
[Bits 1-2] 1 'Maximum Compression'
529F Compression Method 0008 'Deflated'
52A1 Last Mod Time 4E2F6B24 'Tue Jan 15 13:25:08 2019'
52A5 CRC F1B115BD
52A9 Compressed Length 00002904
52AD Uncompressed Length 0000E2A5
52B1 Filename Length 0005
52B3 Extra Length 0018
52B5 Comment Length 0000
52B7 Disk Start 0000
52B9 Int File Attributes 0001
[Bit 0] 1 Text Data
52BB Ext File Attributes 81B40000
52BF Local Header Offset 00000000
52C3 Filename 'file1'
52C8 Extra ID #0001 5455 'UT: Extended Timestamp'
52CA Length 0005
52CC Flags '03 mod access'
52CD Mod Time 5C3E2584 'Tue Jan 15 13:25:08 2019'
52D1 Extra ID #0002 7875 'ux: Unix Extra Type 3'
52D3 Length 000B
52D5 Version 01
52D6 UID Size 04
52D7 UID 000003E8
52DB GID Size 04
52DC GID 000003E8
52E0 CENTRAL HEADER #2 02014B50
52E4 Created Zip Spec 1E '3.0'
52E5 Created OS 03 'Unix'
52E6 Extract Zip Spec 14 '2.0'
52E7 Extract OS 00 'MS-DOS'
52E8 General Purpose Flag 0001
[Bit 0] 1 'Encryption'
[Bits 1-2] 1 'Maximum Compression'
52EA Compression Method 0008 'Deflated'
52EC Last Mod Time 4E2F6C56 'Tue Jan 15 13:34:44 2019'
52F0 CRC EC214569
52F4 Compressed Length 00002913
52F8 Uncompressed Length 0000E635
52FC Filename Length 0005
52FE Extra Length 0018
5300 Comment Length 0000
5302 Disk Start 0000
5304 Int File Attributes 0001
[Bit 0] 1 Text Data
5306 Ext File Attributes 81B40000
530A Local Header Offset 00002943
530E Filename 'file2'
5313 Extra ID #0001 5455 'UT: Extended Timestamp'
5315 Length 0005
5317 Flags '03 mod access'
5318 Mod Time 5C3E27C4 'Tue Jan 15 13:34:44 2019'
531C Extra ID #0002 7875 'ux: Unix Extra Type 3'
531E Length 000B
5320 Version 01
5321 UID Size 04
5322 UID 000003E8
5326 GID Size 04
5327 GID 000003E8
532B END CENTRAL HEADER 06054B50
532F Number of this disk 0000
5331 Central Dir Disk no 0000
5333 Entries in this disk 0002
5335 Total Entries 0002
5337 Size of Central Dir 00000096
533B Offset to Central Dir 00005295
533F Comment Length 0000
Done
zipgrep命令
zipgrep
命令將使用 grep
類的功能來找到壓縮檔案中的特定內容。如果檔案已加密,則需要為要檢查的每個檔案輸入為加密所提供的密碼。如果只想檢查歸檔檔案中單個檔案的內容,請將其名稱新增到 zipgrep
命令的末尾,如下所示。
$ zipgrep hazard twofiles.zip file1
[twofiles.zip] file1 password:
Certain pesticides should be banned since they are hazardous to the environment.
zipinfo 命令
zipinfo
命令提供有關壓縮檔案內容的資訊,無論是否加密。這包括檔名、大小、日期和許可權。
$ zipinfo twofiles.zip
Archive: twofiles.zip
Zip file size: 21313 bytes, number of entries: 2
-rw-rw-r-- 3.0 unx 58021 Tx defN 19-Jan-15 13:25 file1
-rw-rw-r-- 3.0 unx 58933 Tx defN 19-Jan-15 13:34 file2
2 files, 116954 bytes uncompressed, 20991 bytes compressed: 82.1%
zipnote 命令
zipnote
命令可用於從 zip 歸檔中提取註釋或新增註釋。要顯示註釋,只需在命令前面加上歸檔名稱即可。如果之前未新增任何註釋,你將看到類似以下內容:
$ zipnote twofiles.zip
@ file1
@ (comment above this line)
@ file2
@ (comment above this line)
@ (zip file comment below this line)
如果要新增註釋,請先將 zipnote
命令的輸出寫入到檔案:
$ zipnote twofiles.zip > comments
接下來,編輯你剛剛建立的檔案,將註釋插入到 (comment above this line)
行上方。然後使用像這樣的 zipnote
命令新增註釋:
$ zipnote -w twofiles.zip < comments
zipsplit 命令
當歸檔檔案太大時,可以使用 zipsplit
命令將一個 zip 歸檔檔案分解為多個 zip 歸檔檔案,這樣你就可以將其中某一個檔案放到小型 U 盤中。最簡單的方法似乎是為每個部分的壓縮檔案指定最大大小,此大小必須足夠大以容納最大的所包含的檔案。
$ zipsplit -n 12000 twofiles.zip
2 zip files will be made (100% efficiency)
creating: twofile1.zip
creating: twofile2.zip
$ ls twofile*.zip
-rw-rw-r-- 1 shs shs 10697 Jan 15 14:52 twofile1.zip
-rw-rw-r-- 1 shs shs 10702 Jan 15 14:52 twofile2.zip
-rw-rw-r-- 1 shs shs 21377 Jan 15 14:27 twofiles.zip
請注意,提取的檔案是如何依次命名為 twofile1
和 twofile2
的。
總結
zip
命令及其一些壓縮工具變體,對如何生成和使用壓縮檔案歸檔提供了很多控制。
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:wxy 校對:wxy
相關文章
- zip壓縮檔案處理方案(Zip4j壓縮和解壓)
- linux命令系列-zip(壓縮打包)Linux
- Linux科研武器庫 - 檔案壓縮與解壓縮 - zip / unzipLinux
- node ~ zip壓縮 && 檔案加密加密
- ZipArchive解壓縮zip檔案Hive
- linux檔案壓縮和解壓命令Linux
- 壓縮解壓命令(tar, zip)
- java 把檔案壓縮成 zipJava
- java 生成 zip格式 壓縮檔案Java
- 快速解壓 Mac上zip 檔案的兩種方法Mac
- Linux下zip壓縮和unzip解壓縮命令全解Linux
- Linux壓縮及解壓縮命令Linux
- 如何使用Tar命令在Linux系統中解壓各種檔案格式Linux
- linux 壓縮檔案的命令總結Linux
- Linux各種壓縮與解壓方法Linux
- 使用jar與zip壓縮解壓檔案的區別JAR
- Linux 解壓zip檔案詳解之unzip命令!Linux
- 壓縮檔案格式rar和zip有什麼區別 壓縮檔案格式rar和zip哪個好
- linux的tar命令詳情;linux多個檔案壓縮打包到一個壓縮檔案Linux
- Ubuntu 壓縮檔案命令Ubuntu
- Linux中檔案的壓縮和解壓縮Linux
- zip壓縮和解壓縮
- Linux常用命令之檔案壓縮與解壓縮命令詳解Linux
- php 建立壓縮包zip,並將指定檔案放入zip中PHP
- linux下的檔案的壓縮和解壓縮Linux
- Linux 檔案的壓縮Linux
- CentOS中zip壓縮和unzip解壓縮命令詳解CentOS
- java實現zip壓縮檔案/資料夾Java
- Linux 檔案壓縮Linux
- 簡單的zip壓縮和解壓縮
- Java實現檔案壓縮與解壓[zip格式,gzip格式]Java
- pclzip壓縮檔案和解壓的多種示例
- 檔案的壓縮與解壓縮zz--linuxLinux
- 初級:如何在 Linux 中 zip 壓縮檔案和資料夾Linux
- 將多個檔案壓縮成zip檔案進行下載
- AIX系統檔案壓縮解壓縮及效能診斷常用命令AI
- linux下解壓.gz檔案、.cpio檔案、zip檔案Linux
- 壓縮檔案格式rar和zip有什麼區別 zip和rar哪個是無失真壓縮