常見的檔案壓縮格式及對應字尾
檔案字尾 | 描述 |
.gz | 表示由gzip壓縮工具壓縮的檔案 |
.bz2 | 表示由bzip2壓縮工具壓縮的檔案 |
.tar | 表示由tar打包程式打包的檔案(tar沒有壓縮功能隻是把目錄合并成一個檔案) |
.tar.gz | 先由tar打包,再由gzip壓縮 |
.tar.bz2 | 先由tar打包,再由bzip2壓縮 |
.tar.xz | 先由tar打包,再xz壓縮 |
.tgz | 先由tar打包,再由gzip壓縮 |
.tbz2 | 先由tar打包,再由bzip2壓縮 |
.txz | 先由tar打包,再xz壓縮 |
.7z | 由 p7zip 進行壓縮的檔案 |
Linux系統下壓縮檔案
Linux下使用tar方式進行壓縮檔案,使用方式如下:
tar zcvf xxx.tgz file1 file2......
排除某檔案在xxx.tgz之後插入--exclude排除檔案
參數解釋:
-z 使用gzip壓縮/解壓縮
-j 使用bz2屬性的壓縮/解壓縮
-Z 使用 compress 指令進行壓縮或解壓縮
-a 使用歸檔字尾名來決定壓縮程式(若實在不想更換各指令可以直接使用此參數進行自動處理)
-c 建立tar包
-r 追加檔案
-t 列出文檔包中的檔案
-p 包含檔案權限壓縮
-u 隻有本地檔案較新時才更新壓縮包中的對應檔案
-v 顯示壓縮的詳細檔案
-f 遞歸方式,壓縮檔案夾時使用
-P 保留絕對路徑
-x 從歸檔中解出檔案(提取壓縮包)
--exclude 排除某檔案/檔案夾。若排除檔案夾的話最後不能添加目錄分隔符
各檔案解壓示例
# 通用壓縮
$ tar acvf a.tar.7z ./*
# 通用解壓縮
$ tar axvf a.tar.7z
# 解壓tar.gz檔案(tgz檔案為tar.gz檔案的簡寫,此處省略)
$ tar zxvf a.tar.gz
# 解壓tar.xz檔案(txz檔案為tar.xz檔案的簡寫,此處省略)
$ tar xvf a.tar.xz
# 解壓tar.bz2檔案(tbz2檔案均為tar.bz2檔案的簡寫,此處省略)
$ tar jxvf a.tar.bz2
# 解壓tar.Z檔案(tbz檔案或者Z檔案均為tar.Z檔案的簡寫)
$ tar Zxvf a.tar.Z
其他格式的壓縮/解壓縮
在Linux下,一般會先使用tar進行打包,然後再使用各個指令進行壓縮,壓縮後一般使用tar.zip / tar.rar / tar.7z 等形式進行命名。
另,在Linux系統中,如果字尾是tar.gz、tar.xz、tar.bz2、tar.Z檔案字尾時,則是直接使用tar内置的壓縮算法進行壓縮
PS:使用tar打包的原因一般是tar支援
格式 | 壓縮 | 解壓縮 |
zip | zip -r <目标檔案>.zip <源檔案> | unzip <源檔案>.zip |
rar | rar a <目标檔案>.rar <源檔案> | unrar e <源檔案>.rar |
7z | 7zr a <目标檔案>.7z <源檔案> | 7z x <源檔案>.7z |
Windows壓縮的zip在Linux下解壓縮
由于zip格式中并沒有指定編碼格式,Windows下生成的zip檔案中的編碼是GBK/GB2312等,是以,導緻這些zip檔案在Linux下解壓時出現亂碼問題,因為Linux下的預設編碼是UTF8。
目前主流的方法是采用-O指定編碼集的方式unzip -O cp936 <zip-file>,但是這種方式遇到沒有-O選項的unzip指令就需要采用其他方法了。(此處建議在windows下解壓縮後,從新使用其他格式進行壓縮)
例如,采用Python的方式
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import zipfile
#print "Processing File " + sys.argv[1]
file=zipfile.ZipFile(sys.argv[1],"r");
for name in file.namelist():
utf8name=name.decode('gbk')
# print "Extracting " + utf8name
pathname = os.path.dirname(utf8name)
if not os.path.exists(pathname) and pathname!= "":
os.makedirs(pathname)
data = file.read(name)
if not os.path.exists(utf8name):
fo = open(utf8name, "w")
fo.write(data)
fo.close()
file.close()