抛弃Windows,用Ubuntu办公-4.解压缩与压缩

系列全部文章:抛弃Windows,用Ubuntu办公

顺便说一句,我在windows下早就不用winRAR了,一直用的是7-zip的官方版,前几个月发现有个国产的HaoZip比较好用,就把7-zip也卸载了。

WinRAR曾经给我所在的单位发过律师函,当时我给单位的建议是,全部换成7-zip,然后不理律师函。结果这事不了了之,当时有没有人响应这个号召我不清楚,反正我是强行把我们部门所有电脑上的WinRAR都卸载了,现在随便转一圈,电脑上又是RAR当道了……

唉……普及免费软件何其难啊 :cry:

为什么要把解压缩放在前面呢?

因为解压缩碰到的问题远比压缩要多。不同压缩文件的支持问题、zip文件的乱码问题,都需要一个个去解决。而压缩就简单了,直接用右键菜单解决。(我懒,没办法)

:em55:

1.rar和7z格式压缩文件的支持

安装unrar和p7zip包,然后就可以用归档管理器打开了。也可以使用右键的“解压到此处”功能来解压。

sudo apt-get install unrar p7zip

2.使用命令行解压

以前在windows下面看到.tar.gz的文件总是一头雾水,因为解压一次之后,还要再解压一次tar包。来到linux下才知道,原来tar只是个包,bz2或者gz才是起到压缩功能的。看tar的说明看得一头雾水,多试验几遍,把经常使用的几个参数弄明白了,就不再研究tar了。

我一般这么用3个参数进行tar解压,第1个参数x就是解压文件;第2个参数指定压缩类型,如果是gz压缩的,就用z,如果是bzip2压缩的,就用j(其他解压类型可以man tar,至少我目前只碰到过这两种);第3个参数f指定文件名。

这样,如果要解压一个gz压缩包,就可以这样:

tar xzf file.tar.gz

如果是bzip2压缩包,就是这样:

tar xjf file.tar.gz

我的经验就这么多了,想知道更详细的东东,可以看这篇文章:http://docs.google.com/View?id=ajf3xsjz9vhb_3009r95sd8z

3.解压zip文件出现乱码

由于zip文件不支持utf8(或许是这样吧),在windows下面压缩的zip文件中如果有中文文件名,在linux下面解压就是乱码。我最开始google到的消息,是可以使用unzip命令的-O选项指定CP936编码解决,好像是这样:

unzip -O CP936 file.zip

但是我试验发现这个方法不行,才知道新的unzip命令取消了-O选项的支持。

后来找到了解决方法,但是有点麻烦,但我觉得这就是目前能找到的最好的办法了。

首先安装convmv,这个命令用来解决文件名乱码的问题:

sudo apt-get install convmv

在安装了7z支持的前提下,运行下面的代码(范例文件夹中,有一个flash.zip压缩文件,还有几个中文文件名的文件):

LANG=C 7z x flash.zip

反馈如下:

7-Zip 9.04 beta  Copyright (c) 1999-2009 Igor Pavlov  2009-05-30
p7zip Version 9.04 (locale=C,Utf16=off,HugeFiles=on,2 CPUs)

Processing archive: flash.zip

Extracting  ������ľ.fla
Extracting  ������ľ.swf

Everything is Ok

Files: 2
Size:       3004879
Compressed: 822477

然后使用convmv修改文件名,convmv的使用非常简单,只需要用f参数指定原编码,用t参数指定要转换到的编码,后面加上通配符*就行了(因为文件名是乱码,我们无法输入文件名,只能用通配符代替)。对于原编码,我们可以用gbk或者gb2312,而转换到的编码,则应该用utf8.

convmv -f gbk -t utf8 *

从直接结果可以看到,对于文件夹下面原来的中文命名的文件,convmv是直接跳过的。而如果我们不加上notest参数,它也不会实际进行转换,而只显示一个转换后的结果。

Your Perl version has fleas #37757 #49830
Starting a dry run without changes...
mv "./������ľ.fla"  "./保护树木.fla"
mv "./������ľ.swf"  "./保护树木.swf"
Skipping, already UTF-8: ./关于幼教网修改方案.doc
Skipping, already UTF-8: ./现场竞赛名单.xls
No changes to your files done. Use --notest to finally rename the files.

接下来就可以加上notest参数进行实际的转换了:

convmv -f gbk -t utf8 --notest *

当然,如果你还是怕convmv会弄错原有的文件名,可以把flash.zip中的文件解压到一个新的文件夹中再进行转换。