温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Linux中有哪些文件的压缩与解压缩命令

发布时间:2021-06-25 15:34:52 来源:亿速云 阅读:190 作者:Leah 栏目:系统运维

本篇文章为大家展示了Linux中有哪些文件的压缩与解压缩命令,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1、zip压缩与解压缩
       zip是最为广泛使用的压缩程序,经它压缩的文件会产生扩展名为zip的压缩文件,而且这种格式在多种系统上可以使用,像windows中的winzip
       下面看一下在linux中如何建立zip文件。
        我们在终端中输入zip会出现这个命令的一些介绍和参数的意义。

代码如下:


xiaopeng@ubuntu:~/test$ zip
Copyright (c) 1990-2006 Info-ZIP - Type 'zip "-L"' for software license.
Zip 2.32 (June 19th 2006). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
 The default action is to add or replace zipfile entries from list, which
 can include the special name - to compress standard input.
 If zipfile and list are omitted, zip compresses stdin to stdout.
 -f   freshen: only changed files  -u   update: only changed or new files
 -d   delete entries in zipfile    -m   move into zipfile (delete files)
 -r   recurse into directories     -j   junk (don't record) directory names
 -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
 -1   compress faster              -9   compress better
 -q   quiet operation              -v   verbose operation/print version info
 -c   add one-line comments        -z   add zipfile comment
 -@   read names from stdin        -o   make zipfile as old as latest entry
 -x   exclude the following names  -i   include only the following names
 -F   fix zipfile (-FF try harder) -D   do not add directory entries
 -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
 -T   test zipfile integrity       -X   eXclude eXtra file attributes
 -y   store symbolic links as the link instead of the referenced file
 -R   PKZIP recursion (see manual)
 -e   encrypt                      -n   don't compress these suffixes


   下面我们就最简单的实验一下。我们就是把当前目录下文件名以test开头的所有文件压缩文一个文件,并可以查看一下压缩比。(红色是我的注释)

代码如下:


xiaopeng@ubuntu:~/test$ ls -lh


总用量 24K

代码如下:


-rw-r--r-- 1 xiaopeng xiaopeng  212 2009-06-25 14:13 test1
-rw-r--r-- 1 xiaopeng xiaopeng 1.3K 2009-06-25 14:13 test2
-rw-r--r-- 1 xiaopeng xiaopeng 3.4K 2009-06-25 14:14 test3
-rw-r--r-- 1 xiaopeng xiaopeng 9.9K 2009-06-25 14:14 test4

代码如下:


xiaopeng@ubuntu:~/test$ zip test.zip test*  


zip命令后面先跟压缩后的文件名,这里是test.zip,当然后缀名不是必须的。然后跟要压缩的文件名。这里用的test*指的是全部以test开头的文件,包括test1 test2 test3 test4
  adding: test1 (deflated 30%)   这里显示的是压缩比
  adding: test2 (deflated 65%)
  adding: test3 (deflated 64%)
  adding: test4 (deflated 73%)  大体可以看出源文件越大,压缩比就越大

代码如下:


xiaopeng@ubuntu:~/test$ ls -lh


总用量 32K

代码如下:


-rw-r--r-- 1 xiaopeng xiaopeng  212 2009-06-25 14:13 test1
-rw-r--r-- 1 xiaopeng xiaopeng 1.3K 2009-06-25 14:13 test2
-rw-r--r-- 1 xiaopeng xiaopeng 3.4K 2009-06-25 14:14 test3
-rw-r--r-- 1 xiaopeng xiaopeng 9.9K 2009-06-25 14:14 test4
-rw-r--r-- 1 xiaopeng xiaopeng 5.0K 2009-06-25 14:17 test.zip
xiaopeng@ubuntu:~/test$


     上面是压缩了相同类型的文件,其实也可以把不同类型的文件压缩到一起。有时候为了节省硬盘空间,可以在建立压缩文件后,自动删除原始文件,此时只要带一个 -m 的参数就可以。

代码如下:


xiaopeng@ubuntu:~/test$ ls -lh


总用量 24K

代码如下:


-rw-r--r-- 1 xiaopeng xiaopeng  212 2009-06-25 14:13 test1
-rw-r--r-- 1 xiaopeng xiaopeng 1.3K 2009-06-25 14:13 test2
-rw-r--r-- 1 xiaopeng xiaopeng 3.4K 2009-06-25 14:14 test3
-rw-r--r-- 1 xiaopeng xiaopeng 9.9K 2009-06-25 14:14 test4
xiaopeng@ubuntu:~/test$ zip -m test.zip test*  带参数-m
updating: test1 (deflated 30%)
updating: test2 (deflated 65%)
updating: test3 (deflated 64%)
updating: test4 (deflated 73%)
xiaopeng@ubuntu:~/test$ ls -lh


总用量 8.0K

代码如下:


-rw-r--r-- 1 xiaopeng xiaopeng 5.0K 2009-06-25 14:26 test.zip
xiaopeng@ubuntu:~/test$


       可以看出 原始文件已经被删除,只有压缩文件留下了。
       在压缩一些目录的时候,经出在目录中会有子目录,此时根据子目录中的文件是否压缩分为两种情况,一种是压缩,一种是忽略自录中的内容,如果选择压缩子目录,则使用-r参数,如果不压缩,则使用-j 参数
下面举例,一个是-r 一个是-j

代码如下:


xiaopeng@ubuntu:~/test$ ls -lh


总用量 28K

代码如下:


drwxr-xr-x 2 xiaopeng xiaopeng 4.0K 2009-06-25 14:31 pdf
-rw-r--r-- 1 xiaopeng xiaopeng  212 2009-06-25 14:13 test1
-rw-r--r-- 1 xiaopeng xiaopeng 1.3K 2009-06-25 14:13 test2
-rw-r--r-- 1 xiaopeng xiaopeng 3.4K 2009-06-25 14:14 test3
-rw-r--r-- 1 xiaopeng xiaopeng 9.9K 2009-06-25 14:14 test4
xiaopeng@ubuntu:~/test$ zip -r test.zip *  压缩当前目录所有内容,r 参数说明pdf这个子目录中的内容也压缩
 adding: pdf/ (stored 0%)
 adding: pdf/case_Contact.pdf (deflated 10%)
 adding: pdf/case_KRUU.pdf (deflated 9%)
 adding: pdf/case_howard_county_library.pdf (deflated 24%)
 adding: test1 (deflated 30%)
 adding: test2 (deflated 65%)
 adding: test3 (deflated 64%)
 adding: test4 (deflated 73%)
 xiaopeng@ubuntu:~/test$
 


下面的情况是子目录不压缩

代码如下:


xiaopeng@ubuntu:~/test$ ls -l


 总用量 28

代码如下:


drwxr-xr-x 2 xiaopeng xiaopeng  4096 2009-06-25 14:31 pdf
-rw-r--r-- 1 xiaopeng xiaopeng   212 2009-06-25 14:13 test1
-rw-r--r-- 1 xiaopeng xiaopeng  1233 2009-06-25 14:13 test2
-rw-r--r-- 1 xiaopeng xiaopeng  3412 2009-06-25 14:14 test3
-rw-r--r-- 1 xiaopeng xiaopeng 10091 2009-06-25 14:14 test4
xiaopeng@ubuntu:~/test$ zip -j test.zip *
 adding: test1 (deflated 30%)
 adding: test2 (deflated 65%)
 adding: test3 (deflated 64%)
 adding: test4 (deflated 73%)  


子目录pdf被忽略

代码如下:


xiaopeng@ubuntu:~/test$


令外一个技巧: 某些文件因为编码的原因,已经大幅的减少了文件的大小,如GIF,JPG 等格式,在用zip压缩几乎没什么作用而浪费了时间,此时可一用-n参数直接保存这些文件而不压缩。例如:

代码如下:


xiaopeng@ubuntu:~/test$ ls -lh


总用量 68K

代码如下:


-rw-r--r-- 1 xiaopeng xiaopeng  18K 2009-06-04 21:18 duality.jpg
-rw-r--r-- 1 xiaopeng xiaopeng  212 2009-06-25 14:13 test1
-rw-r--r-- 1 xiaopeng xiaopeng 1.3K 2009-06-25 14:13 test2
-rw-r--r-- 1 xiaopeng xiaopeng 3.4K 2009-06-25 14:14 test3
-rw-r--r-- 1 xiaopeng xiaopeng 9.9K 2009-06-25 14:14 test4
-rw-r--r-- 1 xiaopeng xiaopeng  23K 2009-06-10 15:07 test.jpg
xiaopeng@ubuntu:~/test$ zip -n .jpg test.zip *
 adding: duality.jpg (stored 0%)
 adding: test1 (deflated 30%)
 adding: test2 (deflated 65%)
 adding: test3 (deflated 64%)
 adding: test4 (deflated 73%)
 adding: test.jpg (stored 0%)

 
jpg格式的没有压缩而是直接保存了

代码如下:


xiaopeng@ubuntu:~/test$


如果需要直接保存的格式多于一个,可以用冒号隔开 如: -n .jpg: .mpg

小技巧,有时候一个目录下要压缩的文件很多,但是有那么很少的几个不压缩,那么我们可以用-x参数来排除这几个不压缩的。例如

代码如下:


xiaopeng@ubuntu:~/test$ ls
duality.jpg  test1  test2  test3  test4  test.jpg  test.zip
xiaopeng@ubuntu:~/test$ zip -n .jpg test.zip * -x test2   不压缩test2
updating: duality.jpg (stored 0%)
updating: test1 (deflated 30%)
updating: test3 (deflated 64%)
updating: test4 (deflated 73%)
updating: test.jpg (stored 0%)
xiaopeng@ubuntu:~/test$


可以看到test2没有被压缩,而是直接跳过了它。

      压缩链接,zip会先读取该链接的指向的原文件的内容,然后再压缩,而且压缩完了,该链接也就不存在了。

       另外,压缩率也是可以调整的。等级是1到9,1最低,9最高,默认是6 。我们可以用1和9来比较下,压缩率。

代码如下:


xiaopeng@ubuntu:~/test$ zip -1 low.zip *
 adding: test1 (deflated 30%)
 adding: test2 (deflated 63%)
 adding: test3 (deflated 62%)
 adding: test4 (deflated 70%)
xiaopeng@ubuntu:~/test$ zip -9 high.zip *
 adding: low.zip (deflated 4%)
 adding: test1 (deflated 30%)
 adding: test2 (deflated 65%)
 adding: test3 (deflated 64%)
 adding: test4 (deflated 73%)


       因为文件都比较小,效果不是很明显,但是9的压缩率确实高了一点点。
       压缩率高,节省空间,但是压缩时间要长,压缩率低,节省空间少,但是用时间少,所以我们要合理选择压缩率,一般都用默认。

       zip文件解压缩。这个比较简单,就是unzip命令。

代码如下:


xiaopeng@ubuntu:~/test$ ls
test.zip
xiaopeng@ubuntu:~/test$ unzip test.zip
Archive:  test.zip
 inflating: test1                  
 inflating: test2                  
 inflating: test3                  
 inflating: test4                  
xiaopeng@ubuntu:~/test$


     当然也可以用-x参数来指定哪个文件不需要压缩。

代码如下:


xiaopeng@ubuntu:~/test$ unzip test.zip -x test3    test3不需要压缩出来
Archive:  test.zip
 inflating: test1                  
 inflating: test2                  
 inflating: test4                  
xiaopeng@ubuntu:~/test$


       还有一个很有用的参数,-Z ,注意是大写的Z 。作用是查看压缩文件的内容。就像windows中的winzip,我们不用解压缩,也可以打开看看里面有什么文件,文件的类型什么。比如我想看看test.zip里面的内容,而又不想把这个解压缩了再看,可以如下操作。

代码如下:


xiaopeng@ubuntu:~/test$ unzip -Z test.zip
Archive:  test.zip   5069 bytes   4 files
-rw-r--r--  2.3 unx      212 tx defN 25-Jun-09 14:13 test1
-rw-r--r--  2.3 unx     1233 tx defN 25-Jun-09 14:13 test2
-rw-r--r--  2.3 unx     3412 tx defN 25-Jun-09 14:14 test3
-rw-r--r--  2.3 unx    10091 tx defN 25-Jun-09 14:14 test4
4 files, 14948 bytes uncompressed, 4567 bytes compressed:  69.4%
xiaopeng@ubuntu:~/test$


     当然除了这些参数外,还有很多参数可以使用,这里就不一一实验了,我们可以在使用的过程中加以掌握。

2、zip与 tar
     如果你在Linux里面安装过软件压缩包,对这个以.tar.gz为后缀的压缩文件不会陌生,比如我们在Linux QQ 的下载页面http://im.qq.com/qq/linux/download.shtml   ,就会看到其中一个安装包就是.tar.gz包。
    这种包带两个后缀是有原因的,gz和tar 是分别由两种程序产生的。gz时由gzip压缩而成的压缩文件,压缩效果和zip差不多,但是和zip最大的不同在于,gzip无法把很多个单一文件压缩成一个单一文件,所以tar就有了用武之地,tar不是什么压缩程序,它是用来打包文件的。tar和gzip一见如故,两个人合作起来实现压缩,也就是当多个文件压缩时,先用tar把这些文件打包,成为.tar的包,然后再由gzip压缩这个包,于是就有了.tar.gz的文件格式。
     
    首先先看一下gzip和 gunzip的应用。gzip的用法很简单,后面加上要压缩的文件名就行。

代码如下:


xiaopeng@ubuntu:~/test$ ls -lh


总用量 24K

代码如下:


-rw-r--r-- 1 xiaopeng xiaopeng  212 2009-06-25 15:49 test1
-rw-r--r-- 1 xiaopeng xiaopeng 1.3K 2009-06-25 14:13 test2
-rw-r--r-- 1 xiaopeng xiaopeng 3.4K 2009-06-25 14:14 test3
-rw-r--r-- 1 xiaopeng xiaopeng 9.9K 2009-06-25 14:14 test4
xiaopeng@ubuntu:~/test$ gzip test1
xiaopeng@ubuntu:~/test$ ls -lh


总用量 24K

代码如下:


-rw-r--r-- 1 xiaopeng xiaopeng  173 2009-06-25 15:49 test1.gz
-rw-r--r-- 1 xiaopeng xiaopeng 1.3K 2009-06-25 14:13 test2
-rw-r--r-- 1 xiaopeng xiaopeng 3.4K 2009-06-25 14:14 test3
-rw-r--r-- 1 xiaopeng xiaopeng 9.9K 2009-06-25 14:14 test4

      
       注意和zip的不同,只要在命令后加上要压缩的文件名即可,系统会自动为生成的压缩文件起名为原文件名加后缀.gz ,而且原文件在压缩完成后会被删除。
        解压缩用gunzip

代码如下:


xiaopeng@ubuntu:~/test$ gunzip *.gz
xiaopeng@ubuntu:~/test$ ls
test1  test2  test3  test4
xiaopeng@ubuntu:~/test$


        完成后以前的压缩文件test1.gz也会被删除。
    同样gzip在解压前也可以查看文件内容,用参数-l,
    gzip也支持压缩率修改,为1到9,和zip相同。

    下面看tar的用应。tar是用来打包文件的,打包后的包的大小和以前所有原文件大小的和是相等的,(其实大小是不相等的,打完包后的大小大于源文件的大小和,这个可以验证一下。《Ubuntu 入门到精通》说一样大,显然是不对的)也就是说tar没有压缩的效果。tar有非常多的参数,可以通过在线帮助文档查看,或者用--help命令查看。这里我们只用简单用到几个。
    首先是多个文件打包。看例子。

代码如下:


xiaopeng@ubuntu:~/test$ ls
test1  test2  test3  test4
xiaopeng@ubuntu:~/test$ tar -cvf test.tar *


是把当前目录下的所有文件打包成test.tar  几个参数的意义为: c(Creat)建立新文件  v(Verbose)显示命令执行时的信息 f(File)指定打包为文件形式。

代码如下:


test1
test2
test3
test4

代码如下:


xiaopeng@ubuntu:~/test$ ls
test1  test2  test3  test4  test.tar
xiaopeng@ubuntu:~/test$


     要解开tar文件,只需把参数中的c改为x(eXtract)即可

代码如下:


xiaopeng@ubuntu:~/test$ ls
test.tar
xiaopeng@ubuntu:~/test$ tar -xvf test.tar
test1
test2
test3
test4
xiaopeng@ubuntu:~/test$ ls
test1  test2  test3  test4  test.tar
xiaopeng@ubuntu:~/test$

    下面我们看一下tar和gzip合作完成对4个文件的压缩。步骤是先用tar打包,然后对这个.tar包用gzip压缩,最后得到.tar.gz文件。例子:

代码如下:


xiaopeng@ubuntu:~/test$ ls
test1  test2  test3  test4
xiaopeng@ubuntu:~/test$ tar cvf test.tar *   首先打包成test.tar
test1
test2
test3
test4
xiaopeng@ubuntu:~/test$ ls
test1  test2  test3  test4  test.tar
xiaopeng@ubuntu:~/test$ gzip test.tar  把test.tar用gzip压缩成test.tar.gz 压缩包。
xiaopeng@ubuntu:~/test$ ls
test1  test2  test3  test4  test.tar.gz
xiaopeng@ubuntu:~/test$


    解压.tar.gz包时,和压缩过程相反,现解压,再tar把包打开。

代码如下:


xiaopeng@ubuntu:~/test$ ls
test.tar.gz
xiaopeng@ubuntu:~/test$ gunzip test.tar.gz     先用gunzip把.tar.gz包解压缩
xiaopeng@ubuntu:~/test$ ls
test.tar
xiaopeng@ubuntu:~/test$ tar xvf test.tar     然后用tar把.tar包打开
test1
test2
test3
test4
xiaopeng@ubuntu:~/test$ ls
test1  test2  test3  test4  test.tar
xiaopeng@ubuntu:~/test$

上述内容就是Linux中有哪些文件的压缩与解压缩命令,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI