Linux命令 bzip2 -將文件壓縮成bz2格式

2021-10-28 11:37 更新

bzip2

將文件壓縮成bz2格式

補(bǔ)充說明

bzip2命令 用于創(chuàng)建和管理(包括解壓縮)“.bz2”格式的壓縮包。

bzip2 采用 Burrows-Wheeler 塊排序文本壓縮算法和 Huffman 編碼方式壓縮文件。 壓縮率一般比基于 LZ77/LZ78 的壓縮軟件好得多,其性能接近 PPM 族統(tǒng)計(jì)類壓縮軟件。

命令行參數(shù)有意設(shè)計(jì)為非常接近 GNU gzip 的形式,但也不完全相同。

bzip2 從命令行讀入文件名和參數(shù)。 每個文件被名為 "原始文件名.bz2" 的壓縮文件替換。 每個壓縮文件具有與原文件相同的修改時間、 權(quán)限, 如果可能的話,還具有相同的屬主, 因此在解壓縮時這些特性將正確地恢復(fù)。 在某些文件系統(tǒng)中, 沒有權(quán)限、 屬主或時間的概念, 或者對文件名的長度有嚴(yán)格限制, 例如 MSDOS,在這種情況下,bzip2 沒有保持原文件名、 屬主、 權(quán)限以及時間的機(jī)制, 從這個意義上說,bzip2 對文件名的處理是幼稚的。

bzip2 和 bunzip2 在缺省情況下不覆蓋已有的文件。 如果想覆蓋已有的文件,要指定 -f 選項(xiàng)。

如果未指定文件名, bzip2 將壓縮來自標(biāo)準(zhǔn)輸入的數(shù)據(jù)并寫往標(biāo)準(zhǔn)輸出。在這種情況下, bzip2 會拒絕將壓縮結(jié)果寫往終端,因?yàn)檫@完全無法理解并且是沒有意義的。

bunzip2 (以及 bzip2 -d) 對所有指定的文件進(jìn)行解壓縮處理。不是由 bzip2 產(chǎn)生的文件將被忽略,同時發(fā)出一個警告信息。 bzip2 按下列方式由壓縮文件名確定解壓后的文件名:

filename.bz2    解壓成   filename
filename.bz     解壓成   filename
filename.tbz2   解壓成   filename.tar
filename.tbz    解壓成   filename.tar
anyothername    解壓成   anyothername.out

如果文件名的后綴不是下列之一: .bz2, .bz, .tbz2 或 .tbz, .bzip2 將報(bào)錯:無法確定原始文件名,并采用原文件名加 .out 作為解壓縮文件名。

在壓縮時,如果不提供文件名,bzip2 將從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),壓縮結(jié)果寫往標(biāo)準(zhǔn)輸出。

bzip2 采用 32 位 CRC 校驗(yàn)碼作自我檢查,以確認(rèn)解壓后的文件與原始文件相同。 這可用于檢測壓縮文件是否損壞,并防止 bzip2 中未知的缺陷(運(yùn)氣好的話這種可能性非常?。?。 數(shù)據(jù)損壞而未檢測到的幾率非常之小, 對于每個被處理的文件大約是四十億分之一。 檢查是在解壓縮時進(jìn)行的,因此它只能說明某個地方出問題了。 它能幫助恢復(fù)原始未壓縮的數(shù)據(jù)??梢杂?bzip2recover 來嘗試從損壞的文件中恢復(fù)數(shù)據(jù)。

返回值:正常退出返回 0, 出現(xiàn)環(huán)境問題返回 1 (文件未找到,非法的選項(xiàng),I/O錯誤等), 返回 2 表明壓縮文件損壞,出現(xiàn)導(dǎo)致 bzip2 緊急退出的內(nèi)部一致性錯誤(例如缺陷)時返回 3。

語法

bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ...  ]

選項(xiàng)

-c --stdout
    # 將數(shù)據(jù)壓縮或解壓縮至標(biāo)準(zhǔn)輸出。

-d --decompress
    # 強(qiáng)制解壓縮。 bzip2, bunzip2 以及 bzcat 實(shí)際上是同一個程序,進(jìn)行何種操作將根據(jù)程序名確定。  指定該選項(xiàng)后將不考慮這一機(jī)制,強(qiáng)制 bzip2 進(jìn)行解壓縮。

-z --compress
    # -d 選項(xiàng)的補(bǔ)充:強(qiáng)制進(jìn)行壓縮操作,而不管執(zhí)行的是哪個程序。

-t --test
    # 檢查指定文件的完整性,但并不對其解壓縮。 實(shí)際上將對數(shù)據(jù)進(jìn)行實(shí)驗(yàn)性的解壓縮操作,而不輸出結(jié)果。

-f --force
    # 強(qiáng)制覆蓋輸出文件。通常 bzip2 不會覆蓋已經(jīng)存在的文件。該選項(xiàng)還強(qiáng)制 bzip2 打破文件的硬連接,缺省情況下 bzip2 不會這么做。

-k --keep
    # 在壓縮或解壓縮時保留輸入文件(不刪除這些文件)。

-s --small
    # 在壓縮、解壓縮及檢查時減少內(nèi)存用量。采用一種修正的算法進(jìn)行壓縮和測試,每個數(shù)據(jù)塊僅需要 2.5 個字節(jié)。這意味著任何文件都可以在 2300k
    # 的內(nèi)存中進(jìn)行解壓縮, 盡管速度只有通常情況下的一半。

    # 在壓縮時,-s將選定 200k 的塊長度,內(nèi)存用量也限制在 200k 左右, 代價(jià)是壓縮率會降低。 總之,如果機(jī)器的內(nèi)存較少(8兆字節(jié)或更少),
    # 可對所有操作都采用-s選項(xiàng)。參見下面的內(nèi)存管理。

-q --quiet
    # 壓制不重要的警告信息。屬于 I/O 錯誤及其它嚴(yán)重事件的信息將不會被壓制。

-v --verbose
    # 詳盡模式 -- 顯示每個被處理文件的壓縮率。 命令行中更多的 -v 選項(xiàng)將增加詳細(xì)的程度, 使 bzip2 顯示出許多主要用于診斷目的信息。

-L --license -V --version
    # 顯示軟件版本,許可證條款及條件。

-1 to -9
    # 在壓縮時將塊長度設(shè)為 100 k、200 k ..  900 k。 對解壓縮沒有影響。參見下面的內(nèi)存管理。

-- # 將所有后面的命令行變量看作文件名,即使這些變量以減號"-"打頭。 可用這一選項(xiàng)處理以減號"-"打頭的文件名, 例如:bzip2 -- -myfilename.

--repetitive-fast --repetitive-best
    # 這些選項(xiàng)在 0.9.5 及其以上版本中是多余的。 在較早的版本中,這兩個選項(xiàng)對排序算法的行為提供了一些粗糙的控制,有些情況下很有用。
    #  0.9.5及其以上版本采用了改進(jìn)的算法而與這些選項(xiàng)無關(guān)。

參數(shù)

文件:指定要壓縮的文件。

實(shí)例

壓縮指定文件filename:

bzip2 filename
或
bzip2 -z filename

這里,壓縮的時候不會輸出,會將原來的文件filename給刪除,替換成filename.bz2.如果以前有filename.bz2則不會替換并提示錯誤(如果想要替換則指定-f選項(xiàng),例如bzip2 -f filename;如果filename是目錄則也提醒錯誤不做任何操作;如果filename已經(jīng)是壓過的了有bz2后綴就提醒一下,不再壓縮,沒有bz2后綴會再次壓縮。

解壓指定的文件filename.bz2:

bzip2 -d filename.bz2bunzip2 filename.bz2

這里,解壓的時候沒標(biāo)準(zhǔn)輸出,會將原來的文件filename.bz2給替換成filename。如果以前有filename則不會替換并提示錯誤(如果想要替換則指定-f選項(xiàng),例如bzip2 -df filename.bz2。

壓縮解壓的時候?qū)⒔Y(jié)果也輸出:

$bzip2 -v filename

輸入之后,輸出如下:

filename:  0.119:1, 67.200 bits/byte, -740.00% saved, 5 in, 42 out.

這里,加上-v選項(xiàng)就會輸出了,只用壓縮舉例了,解壓的時候同理bzip2 -dv filename.bz2不再舉例了。

模擬解壓實(shí)際并不解壓:

bzip2 -tv filename.bz2

輸入之后,輸出如下:

filename.bz2: ok

這里,-t指定要進(jìn)行模擬解壓,不實(shí)際生成結(jié)果,也就是說類似檢查文件,當(dāng)然就算目錄下面有filename也不會有什么錯誤輸出了,因?yàn)樗静粫娴慕鈮何募?。為了在屏幕上輸出,這里加上-v選項(xiàng)了,如果是真的解壓bzip2 -dv filename.bz2則輸出的是把"ok"替換成了"done"。

壓縮解壓的時候,除了生成結(jié)果文件,將原來的文件也保存:

bzip2 -k filename

這里,加上-k就保存原始的文件了,否則原始文件會被結(jié)果文件替代。只用壓縮舉例了,解壓的時候同理$bzip2 -dk filename.bz2不再舉例了。

解壓到標(biāo)準(zhǔn)輸出:

bzip2 -dc filename.bz2

輸入之后,輸出如下:

hahahhaahahha

這里,使用-c指定到標(biāo)準(zhǔn)輸出,輸出的是文件filename的內(nèi)容,不會將filename.bz2刪除。

壓縮到標(biāo)準(zhǔn)輸出:

bzip2 -c filename
bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.

這里,使用-c指定壓縮到標(biāo)準(zhǔn)輸出不刪除原有文件,不同的是,壓縮后的文件無法輸出到標(biāo)準(zhǔn)輸出。

使用bzip2的時候?qū)⑺泻竺娴目醋魑募?即使文件名以'-'開頭):

bzip2 -- -myfilename

這里主要是為了防止文件名中-產(chǎn)生以為是選項(xiàng)的歧義。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號