1. 程式人生 > >unzip解壓失敗( cannot find zipfile directory)

unzip解壓失敗( cannot find zipfile directory)

[[email protected] soft]# unzip QY.zip 
Archive:  QY.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of
this archive. unzip: cannot find zipfile directory in one of QY.zip or QY.zip.zip, and cannot find QY.zip.ZIP, period.

剛開始以為是壓縮包檔案部分資訊丟失,導致解壓出錯了,不應該呀,怎麼會出錯呢,,emmmm,還是感覺不對勁,於是Google了下:

  1. 一般在linux下解壓zip檔案,直接用系統預設的extract here進行解壓(預設使用的是 unzip)
  2. 如果壓縮檔案.zip是大於2G的,那unzip就無法使用了,這是由於C庫中long型別資料所能表示的檔案偏移在32位機子上只能有2G
  3. 所以如果要解壓大檔案,可以使用7zip來解壓

安裝7zip

官網地址:http://www.7-zip.org/download.html
軟體下載地址:https://sourceforge.net/projects/p7zip/files/p7zip/

這裡使用16.02版本進行安裝,linux環境

wget https://jaist.dl.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_src_all.tar.bz2
tar -jxvf p7zip_16.02_src_all.tar.bz2
cd p7zip_16.02
make && make install
  • 如果執行make命令時,提示安裝g++的話,請執行 yum install gcc-c++

  • 出現 tar (child): bzip2: Cannot exec: No such file or directory,請安裝yum install bzip2 -y

出現以下資訊,即為安裝完畢

./install.sh /usr/local/bin /usr/local/lib/p7zip /usr/local/man /usr/local/share/doc/p7zip 
- installing /usr/local/bin/7za
- installing /usr/local/man/man1/7z.1
- installing /usr/local/man/man1/7za.1
- installing /usr/local/man/man1/7zr.1
- installing /usr/local/share/doc/p7zip/README
- installing /usr/local/share/doc/p7zip/ChangeLog
- installing HTML help in /usr/local/share/doc/p7zip/DOC

7z命令的使用

解壓縮7z檔案

7za x test.zip -r -o./

引數含義:

  • x 代表解壓縮檔案,並且是按原始目錄樹解壓(還有個引數 e 也是解壓縮檔案,但其會將所有檔案都解壓到根下,而不是自己原有的資料夾下)
  • test.zip 是當前目錄下的壓縮檔案,這裡用做測試檔案
  • -r 表示遞迴解壓縮所有的子資料夾
  • -o 是指定解壓到的目錄,-o後是沒有空格的,直接接目錄(-o./ 為當前目錄)

壓縮檔案/資料夾

7za a -t7z -r test.7z /opt/test/*

引數含義:

  • a 代表新增檔案/資料夾到壓縮包
  • -t 是指定壓縮型別,這裡定為7z,可不指定,因為7za預設壓縮型別就是7z
  • -r 表示遞迴所有的子資料夾
  • test.7z 是壓縮好後的壓縮包名
  • /opt/test/* 是壓縮目錄

注意:7za不僅僅支援.7z壓縮格式,還支援.zip.、tar、.bz2等壓縮型別