創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2020年3月29日 星期日

淺談Ubuntu上常見的壓縮與封存命令-續

封存程式

在Unix類的系統上做資料備份,建議還是用tar,它可較完整地保存檔案的各種屬性,不建議用zip或7z。如果只是有檔案想打包給別人用,但擔心對方不會用tar,那麼理所當然就用zip或7z。

由於7z在許多方面的表現都比zip出色,也支援zip的格式,用法也不難,而且也相當普遍,所以在考慮使用zip時,除非有其他特殊因素,否則應該先認真考慮一下7z會是更好的選擇。也許讀者會想略過zip一節內容而直接看7z的,這兩者的用法並不像上述般有相似性。

zip

ZIP是被廣泛採用的封存檔格式,支援無損資料壓縮。ZIP檔可包含一或多個已被壓縮的檔案或目錄。可用幾種壓縮演算,以DEFLATE最常見。副檔名為.zip或.ZIP。支援基於密碼的對稱式加密,其他功能像檔案名稱加密、自解封存檔(Self-extractin archive, SFX)。也有人習慣稱呼PKZIP,而這稱呼實際上是軟體商品名稱,PK二字源自是ZIP格式創始人的名字。Ubuntu採用Info-ZIP,與PKZIP相容。

指令形式:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
執行zip或unzip不加任何參數時會顯示簡單的使用方法,這裡就只提幾個zip的選項:
  • -r:遞迴目錄。
  • -#:數字0表不壓縮,1-9越高數字表越佳的壓縮。
  • -q
  • -v
  • -x:排除所列的檔案
  • -i:只包含所列的檔案
  • -e:加密
  • -n suffixes:只複製而不壓縮suffixes結尾的檔案,有多個時可用 : 或 ; 隔開,如: -n .gif:.jpg:.mp3
簡單例子,封存dir1/到archive.zip;以及從archive.zip解開到dir2/:

$ zip -r archive.zip dir1/
$ unzip -ddir2 archive.zip
上述的archive.zip也可省略掉副檔名,zip/unzip會自動搞定它。

詳情可見zipunzip的man page。

7z

壓縮的封存檔案格式,支援不同資料壓縮、加密演算法,副檔名為.7z。壓縮方法有LZMA, LZMA2, Bzip2, PPMd, DEFLATE……。壓縮比zip來的好。支援多緒。

不儲存檔案系統的owner/group,若需要的話,建議改用tar -J。

7z在p7zip包中,在Ubuntu已預設安裝。p7zip中還有個7za,是單獨執行檔,比起使用plugins的7z處理較少格式,但執行速度稍快。這裡就只談7z命令的簡單使用。

7z支援的格式有:
  • 打包/解包:7z, XZ, BZIP2, GZIP, TAR, ZIP與WIM
  • 解包:AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR(有裝p7zip-rar的話), RPM, SquashFS, UDF, UEFI, VDI, VHD, VMDK, WIM, XAR與Z
別忘了XZ, BZIP2, GZIP格式只能放單一檔案,即使用7z來做也是一樣。

指令形式:
7z <command> [<switches>... ] <archive_name> [<file_names>... ] [<@listfiles>... ]
一些command像:
  • i:顯示所支援格式的資訊。
  • a:檔案加入封存。
  • x:從封存解出檔案,帶完整路徑。
  • e:從封存解出檔案,不含目錄名稱。
  • t:測試封存的完整性。
  • l:列示封存的內容。
  • d:自封存中刪除檔案。
  • u:更新檔案到封存中。
  • rn:封存中的檔案改名。
  • h:計算雜湊值。
switches也可以放到<file_names>之後。一些switches像:
  • -i[r[-|0]]{@listfile|!wildcard}:包含檔案名稱。
  • -x[r[-|0]]]{@listfile|!wildcard}:排除檔案名稱。
  • -m{Parameters}:設置壓縮方法。Parameters會隨不同格式而有所不同,這裡只列幾個7z適用的:
    • x=[0 | 1 | 3 | 5 | 7 | 9 ]:設定壓縮程度,預設5。0即不壓縮。
    • s=[off | on ]:堅實模式,預設on。
    • t=[off | on | {N}]:多緒模式,預設on。N是執行緒數量。只適用於LZMA / LZMA2壓縮,BZip2解縮/解壓縮。LZMA只能用2執行緒。
    • hc=[off | on]:封存標頭壓縮,預設on。
    • he=[off | on]:封存標頭加密,預設off。
  • -o{Directory}:設定輸出目錄。若目錄不存在,會自動建立。
  • -p{Password}:設定密碼。
  • -sfx:建立可自解執行封存檔。
  • -si:自stdin讀資料(如 tar cf - directory | 7z a -si directory.tar.7z)
  • -so:寫資料到stdout(如 7z x -so directory.tar.7z | tar xf -)
  • -t{Type}:設定封存種類。如果可從封存檔副檔名得知封存種類,就無須設定此項。
  • -v{Size}[b|k|m|g]:建立卷冊。
  • -y:假定所有詢問皆為是。
以下是幾個簡單例子:

$ 7z a archive.7z folder1/
$ 7z a archive.zip folder1/
$ 7z a -p -sfx sfx_archive folder1/
最後一例的SFX檔可直接執行進行解開;或者也可以加上 -h 以顯示用法:

$ ./sfx_archive -h
較詳細使用可見man page,或是系統中的文件檔/usr/share/doc/p7zip/DOC/MANUAL/start.htm

沒有留言:

張貼留言