linux下zip/unzip詳解


linux下zip_unzip詳解


命令列表:
zip
    -q (quiet)
    -r (recursive)
    -0(level0-level9)
    -e (encrypt)
    -u (update)
    -m (move into zipfile delete original-Source files)
    
unzip
    -d (directory)
    -P (password)
    -x (exclude)
    -o (overwrite)
    -n (never overwrite)
    -l (list archive)
    -t (test compressed archive data)
    -v (list verbosely/show version info)
    -j (junk paths "do not make directories")
    
擴展:    
zipcloak
zipdetails
zipgrep
zipinfo
zipsplit




環境
[root@osker ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@osker ~]# uname -r
3.10.0-957.el7.x86_64

安裝zip、unzip
[root@osker ~]# yum install -y zip unzip
[root@osker ~]# rpm -qa zip unzip
zip-3.0-11.el7.x86_64
unzip-6.0-20.el7.x86_64





zip


如何使用zip壓縮一個或多個文件?
[root@osker ~]# touch test{1..5}.txt
[root@osker ~]# ll
total 4
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
-rw-r--r--  1 root root    0 Apr 10 20:10 test1.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test2.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test3.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test4.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test5.txt
#test為壓縮后的文件名,后面跟需要壓縮的文件。
[root@osker ~]# zip test test1.txt test2.txt
  adding: test1.txt (stored 0%)
  adding: test2.txt (stored 0%)
[root@osker ~]# ll
total 8
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
-rw-r--r--  1 root root    0 Apr 10 20:10 test1.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test2.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test3.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test4.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test5.txt
-rw-r--r--  1 root root  314 Apr 10 20:11 test.zip
[root@osker ~]# unzip -l test.zip
Archive:  test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  04-10-2020 20:10   test1.txt
        0  04-10-2020 20:10   test2.txt
---------                     -------
        0                     2 files
[root@osker ~]# file test.zip
test.zip: Zip archive data, at least v1.0 to extract
        
以上過程可以看出,zip壓縮后,創建的壓縮包自動添加.zip



-q (quiet)
如果不想壓縮的時候顯示信息使用-q (quiet) 參數
[root@osker ~]# zip -q archive.zip test1.txt test2.txt test3.txt
[root@osker ~]# ll
total 12
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
-rw-r--r--  1 root root  460 Apr 10 20:17 archive.zip
-rw-r--r--  1 root root    0 Apr 10 20:10 test1.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test2.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test3.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test4.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test5.txt
-rw-r--r--  1 root root  314 Apr 10 20:11 test.zip

-r (recursive)
如果要壓縮一個目錄,就需要用-r (recursive) 參數
[root@osker ~]# mkdir dir
[root@osker ~]# mv test{1..5}.txt dir/
[root@osker ~]# ll dir
total 0
-rw-r--r-- 1 root root 0 Apr 10 20:10 test1.txt
-rw-r--r-- 1 root root 0 Apr 10 20:10 test2.txt
-rw-r--r-- 1 root root 0 Apr 10 20:10 test3.txt
-rw-r--r-- 1 root root 0 Apr 10 20:10 test4.txt
-rw-r--r-- 1 root root 0 Apr 10 20:10 test5.txt
[root@osker ~]# zip -r dir.zip dir
  adding: dir/ (stored 0%)
  adding: dir/test1.txt (stored 0%)
  adding: dir/test2.txt (stored 0%)
  adding: dir/test3.txt (stored 0%)
  adding: dir/test4.txt (stored 0%)
  adding: dir/test5.txt (stored 0%)
[root@osker ~]# ll
total 16
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
-rw-r--r--  1 root root  460 Apr 10 20:17 archive.zip
drwxr-xr-x  2 root root   91 Apr 10 20:20 dir
-rw-r--r--  1 root root  928 Apr 10 20:21 dir.zip
-rw-r--r--  1 root root  314 Apr 10 20:11 test.zip
[root@osker ~]# unzip -l dir.zip
Archive:  dir.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  04-10-2020 20:20   dir/
        0  04-10-2020 20:10   dir/test1.txt
        0  04-10-2020 20:10   dir/test2.txt
        0  04-10-2020 20:10   dir/test3.txt
        0  04-10-2020 20:10   dir/test4.txt
        0  04-10-2020 20:10   dir/test5.txt
---------                     -------
        0                     6 files


-(0-9)        
設置壓縮級別,默認壓縮級別為-6,-0為只打包不壓縮,-9壓縮率最高,花費時間久。
[root@osker ~]# zip -6 -r 6dir.zip dir/
  adding: dir/ (stored 0%)
  adding: dir/test1.txt (stored 0%)
  adding: dir/test2.txt (stored 0%)
  adding: dir/test3.txt (stored 0%)
  adding: dir/test4.txt (stored 0%)
  adding: dir/test5.txt (stored 0%)
[root@osker ~]# zip -r xdir.zip dir/
  adding: dir/ (stored 0%)
  adding: dir/test1.txt (stored 0%)
  adding: dir/test2.txt (stored 0%)
  adding: dir/test3.txt (stored 0%)
  adding: dir/test4.txt (stored 0%)
  adding: dir/test5.txt (stored 0%)
[root@osker ~]# ll 6dir.zip xdir.zip
-rw-r--r-- 1 root root 928 Apr 10 20:27 6dir.zip
-rw-r--r-- 1 root root 928 Apr 10 20:28 xdir.zip
可以看出默認為-6壓縮級別


-e (encrypt)
為壓縮包添加密碼,使用-e (encrypt) 參數
[root@osker ~]# zip -e -q edir.zip dir/test1.txt
Enter password:
Verify password:
[root@osker ~]# ll edir.zip
-rw-r--r-- 1 root root 204 Apr 10 20:31 edir.zip
[root@osker ~]# unzip edir.zip
Archive:  edir.zip
[edir.zip] dir/test1.txt password:
replace dir/test1.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
 extracting: dir/test1.txt


-u (update): only changed or new files
需要追加文件到壓縮包時,需要使用-u參數
[root@osker ~]# zip an.zip -u test1.txt
  adding: test1.txt (stored 0%)


-m (move into zipfile delete original-Source files)  
[root@osker ~]# zip an.zip -u test1.txt
  adding: test1.txt (stored 0%)
[root@osker ~]# ll
total 8
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
-rw-r--r--  1 root root 1080 Apr 10 21:33 an.zip
-rw-r--r--  1 root root    0 Apr 10 21:32 test1.txt
[root@osker ~]# zip -m test.zip test1.txt
  adding: test1.txt (stored 0%)
[root@osker ~]# ll
total 12
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
-rw-r--r--  1 root root 1080 Apr 10 21:33 an.zip
-rw-r--r--  1 root root  168 Apr 10 21:37 test.zip
可以發現壓縮后test1.txt文件沒有了






 
unzip

解壓縮,默認解壓到當前目錄
[root@osker ~]# unzip test.zip
Archive:  test.zip
 extracting: test1.txt               
 extracting: test2.txt               
[root@osker ~]# ll
total 12
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
drwxr-xr-x  2 root root   91 Apr 10 20:31 dir
-rw-r--r--  1 root root  204 Apr 10 20:31 edir.zip
-rw-r--r--  1 root root    0 Apr 10 20:10 test1.txt
-rw-r--r--  1 root root    0 Apr 10 20:10 test2.txt
-rw-r--r--  1 root root  314 Apr 10 20:11 test.zip

-d (directory)
解壓到指定目錄,使用-d (directory) 參數
[root@osker ~]# unzip test.zip -d /opt
Archive:  test.zip
   creating: /opt/dir/
 extracting: /opt/dir/test2.txt      
 extracting: /opt/dir/test3.txt      
 extracting: /opt/dir/test4.txt      
 extracting: /opt/dir/test5.txt      
 extracting: /opt/dir/test1.txt      
[root@osker ~]# ll /opt/dir/
total 0
-rw-r--r-- 1 root root 0 Apr 10 20:10 test1.txt
-rw-r--r-- 1 root root 0 Apr 10 20:10 test2.txt
-rw-r--r-- 1 root root 0 Apr 10 20:10 test3.txt
-rw-r--r-- 1 root root 0 Apr 10 20:10 test4.txt
-rw-r--r-- 1 root root 0 Apr 10 20:10 test5.txt

-P (password)
解壓加密的壓縮包時,不想使用交互式,可以使用-P (password)參數
[root@osker ~]# unzip -P 1 edir.zip      #密碼為1
Archive:  edir.zip
 extracting: dir/test1.txt

-x (exclude)
解壓時候,需要排除某個文件不解壓,使用-x (exclude)參數
[root@osker ~]# unzip test.zip -x dir/test1.txt
Archive:  test.zip
   creating: dir/
 extracting: dir/test2.txt           
 extracting: dir/test3.txt           
 extracting: dir/test4.txt           
 extracting: dir/test5.txt

-o (overwrite)
當解壓的文件提示需要覆蓋確認的時候,可以使用-o參數,不提示直接覆蓋。
[root@osker ~]# unzip test.zip
Archive:  test.zip
replace dir/test2.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
 extracting: dir/test2.txt           
 extracting: dir/test3.txt           
 extracting: dir/test4.txt           
 extracting: dir/test5.txt           
 extracting: dir/test1.txt           
[root@osker ~]# unzip -o test.zip
Archive:  test.zip
 extracting: dir/test2.txt           
 extracting: dir/test3.txt           
 extracting: dir/test4.txt           
 extracting: dir/test5.txt           
 extracting: dir/test1.txt

 
-n (never overwrite)
解壓目標目錄中沒有的文件
[root@osker ~]# unzip -n test.zip
Archive:  test.zip
 extracting: dir/new.txt
 
 
-l (list archive)
 不解壓查看壓縮包使用-l參數
 [root@osker ~]# unzip -l edir.zip
Archive:  edir.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  04-10-2020 20:10   dir/test1.txt
---------                     -------
        0                     1 file


-t (test compressed archive data)
測試壓縮包有無損壞
[root@osker ~]# unzip -t an.zip
Archive:  an.zip
    testing: anaconda-ks.cfg          OK
    testing: test1.txt                OK
No errors detected in compressed data of an.zip.        
        
        
-v (list verbosely/show version info)
列出壓縮包里的詳細信息
[root@osker ~]# unzip -v an.zip
Archive:  an.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
    1392  Defl:N      754  46% 04-19-2019 12:22 60a52de9  anaconda-ks.cfg
       0  Stored        0   0% 04-10-2020 21:32 00000000  test1.txt
--------          -------  ---                            -------
    1392              754  46%                            2 files
[root@osker ~]# ll
total 12
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
-rw-r--r--  1 root root 1080 Apr 10 21:33 an.zip
-rw-r--r--  1 root root  168 Apr 10 21:37 test.zip


-j (junk paths "do not make directories")
解壓時候不生成目錄
[root@osker ~]# unzip -l dir.zip
Archive:  dir.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  04-10-2020 21:47   dir/
        0  04-10-2020 21:47   dir/test1.txt
        0  04-10-2020 21:47   dir/test2.txt
        0  04-10-2020 21:47   dir/test3.txt
---------                     -------
        0                     4 files
[root@osker ~]# unzip -j dir.zip
Archive:  dir.zip
 extracting: test1.txt               
 extracting: test2.txt               
 extracting: test3.txt               
[root@osker ~]# ll
total 8
-rw-------. 1 root root 1392 Apr 19  2019 anaconda-ks.cfg
drwxr-xr-x  2 root root   57 Apr 10 21:47 dir
-rw-r--r--  1 root root  620 Apr 10 21:47 dir.zip
-rw-r--r--  1 root root    0 Apr 10 21:47 test1.txt
-rw-r--r--  1 root root    0 Apr 10 21:47 test2.txt
-rw-r--r--  1 root root    0 Apr 10 21:47 test3.txt        
        
        
        
        
zipcloak
有時候壓縮文件的時候忘記添加密碼,可以使用zipcloak命令追加密碼。
[root@osker ~]# zipcloak test.zip
Enter password:
Verify password:
encrypting: dir/
encrypting: dir/test2.txt
encrypting: dir/test3.txt
encrypting: dir/test4.txt
encrypting: dir/test5.txt
encrypting: dir/test1.txt
encrypting: dir/new.txt


zipdetails
可能需要安裝此包
[root@osker ~]# yum install -y perl-IO-Compress
查看zip包詳細屬性
[root@osker ~]# zipdetails an.zip
0000 LOCAL HEADER #1       04034B50
0004 Extract Zip Spec      14 '2.0'
0005 Extract OS            00 'MS-DOS'
0006 General Purpose Flag  0000
     [Bits 1-2]            0 'Normal Compression'
0008 Compression Method    0008 'Deflated'
000A Last Mod Time         4E9362D7 'Fri Apr 19 12:22:46 2019'
000E CRC                   60A52DE9
0012 Compressed Length     000002F2
0016 Uncompressed Length   00000570
001A Filename Length       000F
001C Extra Length          001C
001E Filename              'anaconda-ks.cfg'
......

zipgrep
過濾壓縮包的內容
[root@osker ~]# zipgrep root  an.zip
anaconda-ks.cfg:rootpw --iscrypted $6$4MbbflESaQBP8rLd$zgLUIfBs9zgnNkeDfA5G67PKjt7rdf.Z/ChB59kgYw.7804KH2hiXCL1SXcCjaMrHceZcRvSN2yVcst/D/qGL/
anaconda-ks.cfg:pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty          
[root@osker ~]# grep 'root' anaconda-ks.cfg
rootpw --iscrypted $6$4MbbflESaQBP8rLd$zgLUIfBs9zgnNkeDfA5G67PKjt7rdf.Z/ChB59kgYw.7804KH2hiXCL1SXcCjaMrHceZcRvSN2yVcst/D/qGL/
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
可以看到和grep出來的結果是一樣的。


zipinfo
查看壓縮包里文件的詳細屬性
[root@osker ~]# zipinfo test.zip
Archive:  test.zip
Zip file size: 1162 bytes, number of entries: 7
drwxr-xr-x  3.0 unx        0 Bx stor 20-Apr-10 20:58 dir/
-rw-r--r--  3.0 unx        0 Bx stor 20-Apr-10 20:10 dir/test2.txt
-rw-r--r--  3.0 unx        0 Bx stor 20-Apr-10 20:10 dir/test3.txt
-rw-r--r--  3.0 unx        0 Bx stor 20-Apr-10 20:10 dir/test4.txt
-rw-r--r--  3.0 unx        0 Bx stor 20-Apr-10 20:10 dir/test5.txt
-rw-r--r--  3.0 unx        0 Bx stor 20-Apr-10 20:10 dir/test1.txt
-rw-r--r--  3.0 unx        0 Bx stor 20-Apr-10 20:58 dir/new.txt
7 files, 0 bytes uncompressed, 0 bytes compressed:  0.0%


zipsplit
將壓縮包切分為多個小包
[root@osker ~]# ll -h
-rw-r--r--  1 root root 1.2K Apr 10 21:03 test.zip
[root@osker ~]# zipsplit -n 1024 test.zip
2 zip files will be made (100% efficiency)
creating: test1.zip
creating: test2.zip
[root@osker ~]# ll test*
-rw-r--r-- 1 root root 1000 Apr 10 21:16 test1.zip
-rw-r--r-- 1 root root  184 Apr 10 21:16 test2.zip
-rw-r--r-- 1 root root 1162 Apr 10 21:03 test.zip






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM