Skip to content

在(linux)命令行下解压文件……

四月 27, 2010

写本文的原因是之前某友人的机器显卡有些问题,打不开X,不得不在命令行下解压一些文件来装显卡驱动,因此查了一些在unixoid系统下面解压文件的命令,在此记录备用。

用过Unixoid系统的人可能都会注意到这些系统下面有很多各种奇妙扩展名的压缩文件:
.gz .tgz .lzma .bz2 .tar 等等
还有一些比较诡异的:
.lha  .xz .dar .kgb(……)
组合型扩展名也很常见……比较普遍的是和tar组合
.tar.gz .tar.Z .tar.bz2  .iso.xz

至于为什么会有这么多奇怪的压缩文件类型……这只能怪大家都喜欢闭门开发自己的压缩算法各搞一套……当然还有利益因素(典型的如.rar),这里就不提了。对于普通用户而言记忆这么多压缩包的解压方法也是足够让人抓狂的……这里只写一些经常会用到的。

首先是最常用的tar家族……从磁带机时代就有的古老格式(Tape ARchive)。tarball本身并没有压缩,只是归档(或者说打包)而已,但是采用不同的压缩算法就可以达到压缩的目的,比如tar.gz就是用gunzip进行压缩的。
tar:
tar -xvf file.tar
tar.gz 或者 tgz(两者是一种东西,只是名字不同……):
tar -xvzf file.tar.gz /tar –xvzf file.tgz
tar.bz2 或者 tbz2:
tar -xvjf file.tar.bz2 / tar –xvjf file.tbz
tar.Z:
tar –xvZf file.tar.Z
tar.lzma 或者 tlz:
tar –xvlf file.tar.lzma / tar –xvlf file.tlz(呃,这个是我猜的,没试过,但是用 tar –xvf –-lzma file.tar.lzma一定可以)

参数似乎很难记,但是也是有规律的:
x = eXtract,解压缩,如果把这个字符改成c就是Create建立压缩文件
v = verbose (optional)  可视模式,会显示中间过程
z = gzip-ped; j = bzip2-zipped Z = Z-zipped 使用的压缩算法
f = from/to file … 后面接要解压/压缩的文件
另外,比较高版本的tar其实可以自动识别各种tar文件算法,所以遇到文件名里面带有tar.*的一律用tar -xvf应该就可以。

rar:(非开源,windows下很常用)
rar x file.rar

7z:(新兴的开源压缩格式)
7z x file.7z
lzma: (7zip的基础算法)
unlzma file.lzma
xz: (同样用的是lzma算法)
unxz file.xz

zip:(可能是windows下最常用的压缩格式)
unzip file.zip
bz2: (a Burrows-Wheeler transform zip)
bunzip file.bz2
gz: (GNU zip)
gunzip file.gz

Z:(古老的压缩格式)
uncompress file.Z

lha或者lzh(日本人提出的众多奇怪压缩格式之一):
lha -e file.lha / lha –e file.lzh

cab:(呃,实际上有两种cab格式,一种是M$常用的压缩格式,另一种是installshield使用的)
对于M$的:
cabextract file.cab
对于installshield的:
unshield file.cab
至于你怎么区分这两种,我不知道……

对于正常人(……)来说,可以写一个小脚本程序加入你的shell终端启动项中,对于bash而言,就是~/.bashrc

script from rezza@Arch Linux:

# Extract files from any archive
# Usage: ex <archive_name>
ex () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "’$1′ cannot be extracted via extract()" ;;
esac
else
echo "’$1′ is not a valid file"
fi
}

这样可以简单解决常用的压缩文件格式,只需键入 “ex filename” 即可。你也可以把其他要用的文件解压缩命令加到里面。

Advertisements
No comments yet

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: