首页 > 代码库 > Linux常用指令---tar | zip (解压缩)

Linux常用指令---tar | zip (解压缩)

减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。

 

1、zip 

zip -r myfile.zip ./*
将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.

 

zip -d myfile.zip smart.txt
删除压缩文件中smart.txt文件


    zip -m myfile.zip ./rpm_info.txt
向压缩文件中myfile.zip中添加rpm_info.txt文件

 

    zip -r filename.zip filesdir 

在这个例子里,filename.zip 代表你创建的文件,filesdir 代表你想放置新 zip 文件的目录。-r 选项指定你想递归地(recursively)包括所有包括在 filesdir 目录中的文件。

 

     zip -r filename.zip file1 file2 file3 /usr/work/school 

上面的命令把 file1、file2、 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.zip 文件中。

 

 

 

     2、unzip 

 

     unzip -o -d /home/sunny myfile.zip
把myfile.zip文件解压到 /home/sunny/
-o:不提示的情况下覆盖文件;
-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;

 

     unzip abc\?.zip

我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们,

?表示一个字符,如果用*表示任意多个字符。

 

     unzip -v large.zip

我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么

 

     unzip -t large.zip

查看一下这个压缩文件是否下载正确了

 

     unzip -j music.zip

我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录

 

     3、tar 

     

     我们知道在Windows下最常见 的压缩文件就只有两种,一是,zip,另一个是.rap。可是Linux就不同了,它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的 压缩文件名,此外windows下的.zip和.rar也可以在Linux下使用。tar本身不具有压缩功能。他是调用压缩功能实现的

必要参数有如下:

-A 新增压缩文件到已存在的压缩

-B 设置区块大小

-c 建立新的压缩文件

-d 记录文件的差别

-r 添加文件到已经压缩的文件

-u 添加改变了和现有的文件到已经存在的压缩文件

-x 从压缩的文件中提取文件

-t 显示压缩文件的内容

-z 支持gzip解压文件

-j 支持bzip2解压文件

-Z 支持compress解压文件

-v 显示操作过程

-l 文件系统边界设置

-k 保留原有文件不覆盖

-m 保留文件不被覆盖

-W 确认压缩文件的正确性

 

  实例1:将文件全部打包成tar包

命令:

tar -cvf log.tar log2012.logtar -zcvf log.tar.gz log2012.logtar -jcvf log.tar.bz2 log2012.log

 

输出:

[root@localhost test]# ls -al log2012.log---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log[root@localhost test]# tar -cvf log.tar log2012.log log2012.log[root@localhost test]# tar -zcvf log.tar.gz log2012.loglog2012.log[root@localhost test]# tar -jcvf log.tar.bz2 log2012.log log2012.log[root@localhost test]# ls -al *.tar*-rw-r--r-- 1 root root 307200 11-29 17:54 log.tar-rw-r--r-- 1 root root   1413 11-29 17:55 log.tar.bz2-rw-r--r-- 1 root root   1413 11-29 17:54 log.tar.gz

 

 说明:

tar -cvf log.tar log2012.log       仅打包,不压缩! 

tar -zcvf log.tar.gz log2012.log   打包后,以 gzip 压缩 

tar -jcvf log.tar.bz2 log2012.log  打包后,以 bzip2 压缩 

在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar包; 如果加 j 参数,则以 .tar.bz2 来作为tar包名。

 

    实例2:查阅上述 tar包内有哪些文件

命令:

tar -ztvf log.tar.gz

输出:

[root@localhost test]# tar -ztvf log.tar.gz

---xrw-r-- root/root    302108 2012-11-13 06:03:25 log2012.log

说明:

由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上 z 这个参数了。

 

实例3:将tar 包解压缩

命令:

tar -zxvf /opt/soft/test/log.tar.gz

输出:

[root@localhost test3]# ll

总计 0[root@localhost test3]# tar -zxvf /opt/soft/test/log.tar.gz

log2012.log

[root@localhost test3]# ls

log2012.log

[root@localhost test3]#

说明:

在预设的情况下,我们可以将压缩档在任何地方解开的

 

实例4:只将 /tar 内的 部分文件解压出来

命令:

tar -zxvf /opt/soft/test/log30.tar.gz log2013.log

输出:

[root@localhost test]# tar -zcvf log30.tar.gz log2012.log log2013.log log2012.loglog2013.log[root@localhost test]# ls -al log30.tar.gz -rw-r--r-- 1 root root 1512 11-30 08:19 log30.tar.gz[root@localhost test]# tar -zxvf log30.tar.gz log2013.loglog2013.log[root@localhost test]# ll-rw-r--r-- 1 root root   1512 11-30 08:19 log30.tar.gz[root@localhost test]# cd test3[root@localhost test3]# tar -zxvf /opt/soft/test/log30.tar.gz log2013.loglog2013.log[root@localhost test3]# ll总计 4-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log[root@localhost test3]#

 

说明:

我可以透过 tar -ztvf 来查阅 tar 包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件!

实例5:文件备份下来,并且保存其权限

命令:

tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log 

输出:

[root@localhost test]# ll总计 0-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log-rw-r--r-- 1 root root      0 11-16 14:41 log2016.log[root@localhost test]# tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log log2014.loglog2015.loglog2016.log[root@localhost test]# cd test6[root@localhost test6]# ll[root@localhost test6]# tar -zxvpf /opt/soft/test/log31.tar.gz log2014.loglog2015.loglog2016.log[root@localhost test6]# ll总计 0-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log-rw-r--r-- 1 root root 0 11-16 14:41 log2016.log[root@localhost test6]#

 

说明:

这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时

 

实例6:在 文件夹当中,比某个日期新的文件才备份

命令:

tar -N "2012/11/13" -zcvf log17.tar.gz test

输出:

[root@localhost soft]# tar -N "2012/11/13" -zcvf log17.tar.gz testtar: Treating date `2012/11/13 as 2012-11-13 00:00:00 + 0 nanosecondstest/test/log31.tar.gztest/log2014.logtest/linklog.logtest/log2015.logtest/log2013.logtest/log2012.logtest/log2017.logtest/log2016.logtest/log30.tar.gztest/log.tartest/log.tar.bz2test/log.tar.gz

 

说明:

实例7:备份文件夹内容是排除部分文件

命令:

tar --exclude scf/service -zcvf scf.tar.gz scf/*

输出:

[root@localhost test]# tree scf

scf

|-- bin

|-- doc

|-- lib

`-- service

     `-- deploy

          |-- info

          `-- product

7 directories, 0 files

[root@localhost test]# tar --exclude scf/service -zcvf scf.tar.gz scf/* 

scf/bin/

scf/doc/

scf/lib/

[root@localhost test]#

Linux常用指令---tar | zip (解压缩)