请选择 进入手机版 | 继续访问电脑版

[LINUX] Linux中文件的压缩与解压缩下令 操作示例集锦

[复制链接]
查看102 | 回复4 | 2021-9-4 21:49:33 | 显示全部楼层 |阅读模式

      所谓压缩就是将原有的文件通过不同的编码技术举行 运算,以减少数据存储所必要 的空间,利用 前再利用 解压缩还原源文件的内容即可。
和windows一样,在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$

    还可以tar 和gzip同时实现的,只要在tar参数加一个z即可  tar -xvfz test.tar.gz 即可实现上面两个下令 的功能。

    还是比较好明白 的。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar Jean893 | 2021-9-18 08:05:17 | 显示全部楼层
admin楼主加油,看好你哦!
回复

使用道具 举报

avatar 墙和鸡蛋 | 2021-10-2 09:42:25 | 显示全部楼层
admin楼主练了葵花宝典吧?
回复

使用道具 举报

avatar 象棋达人 | 2021-10-5 19:32:57 | 显示全部楼层
对牛弹琴的人越来越多了!
回复

使用道具 举报

avatar 莫言941 | 2021-10-15 15:40:29 | 显示全部楼层
论坛的人气不行了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则