linux 文件的压缩和打包

  在我们的生活中,经常会和朋友、同事、客户发一些文件。为了能够更加快速、高效的将文件传递出去,经常会用到压缩工具。压缩工具通过一定的算法,把数据给尽可能的缩小。这样不仅方便传递、而且可以节省空间。有时候我们需要把一些零散的文件集中到一起。通过使用打包工具,很容易就能把多个文件集中在一个包内,再对包进行压缩传递。是不是很方便呢!下面我们将介绍linux环境下如何对文件进行打包、压缩。
 
1、文件的压缩
   文件的压缩方式有5种:compress、gzip、bzip2、xz、zip
  各打包工具的使用及常用选项如下:
(1)compress(.Z结尾的文件)
-d 解压缩
uncompress
zcat X.Z > X
-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。包含压缩进度
 
 
 (2)gzip(.gz结尾的文件)
-d 解压缩
gunzip
zcat X.gz > X
-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-1 等于 --fast
-2,3,4,5,6(default),7,8
-9 等于 --best
 
 (3)bzip2(.bz2结尾的文件)
-d 解压缩
bunzip
bzcat X.bz2 > X
-k 保留原文件
-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-1 等于 --fast
-2,3,4,5,6,7,8
-9 等于 --best (default)
 
 (4)xz(.xz结尾的文件)
-d 解压缩
xzcat
-k 保留原文件
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-0 等于 --fast
-1 -2,3,4,5,6(default),7,8
-9 等于 --best
 
 (5)zip(.zip结尾的文件)
unzip
|zip 将生成的文件名 -
可以将管道前的输出结果转为文件并压缩。通过此方式压缩的文件只能使用“unzip -p 压缩包 > 新文件 ”来解压缩
unzip -p 预览解压缩后的内容到屏幕,可以配置重定向将结果保存到指定文件,权限会发生变化。
 
  
 
 
2、文件的打包
生活中我们常见到文件以 .tar.xz结尾,这表示了它把多个文件用tar打包后进行了压缩
(1)tar
-cf 创建包名字 原文件(可以指定多个)
-tf 包名字 显示包中的文件名
-tvf 详细显示包中的文件名
-rf 包名字 新文件名(可以指定多个)
--delete -f 包名字 被删除的文件名(可以指定多个)
eg:tar --delete -f sumfile.tar ./f{1..4}
-xf 包名字 解出所有的文件到当前目录
-xf 包名字 文件名 解所指定的文件到当前目录
-C 解包到指定目录
-v 显示过程
-Jcf 创建包的名字(.tar.xz) 原文件(可以指定多个) 打包并用xz压缩
-jcf 创建包的名字(.tar.bz2) 原文件(可以指定多个) 打包并用bzip压缩
-zcf 创建包的名字(.tar.gz) 原文件(可以指定多个) 打包并用gzip压缩
-T 指定个列表,包含需要被打包的文件,以换行符为间隔
-X 指定个排除列表,以换行符为间隔(不支持递归排除)
 
分割大的 tar 文件为多份小文件:
split –b Size –d tar-file-name prefix-name
合并
cat 被分隔出的多个文件名 > 单个文件名
 
 
(2)cpio
cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复
的工具,它可以解压以“.cpio” 或者“.tar”
cpio [ 选项] > 文件名或者设备名
cpio [ 选项] < 文件名或者设备名
选项
-o 将文件拷贝打包成文件或者将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称。
-d 解包生成目录,在cpio 还原时,自动的建立目录
-c 一种较新的存储方式
 
将etc 目录备份:
  find ./etc -print |cpio -ov >etc.cpio
内容预览
  cpio –tv < etc.cpio
要 解包 文件
  cpio –idv < etc.cpio
 3、参数替换
由于很多命令不 支持 管道|来传递参数,而日常工作 中有 这个必要,所以就有了xargs 命令
xargs 用于产生某个命令的参数,xargs 可以读入 stdin 的数据,并且以空格符 或 回车符将stdin的数据分隔成为arguments
注意:文件 名 或者是其他意义的名词内含有 空格符 的情况
有些命令不能接受过多参数 ,命令执行 可能会 失败,xargs可以解决
示例:
ls f* |xargs rm
find /sbin -perm +700 |ls -l 这个命令是错误的
find /sbin -perm +7000 | xargs ls –l
find 和xargs 格式:find | xargs COMMAND
 
 
 
----------------------------------------------------------------------------------------------------------------------
练习:试着将find查找到的文件进行打包
 
法一:利用-T我们可以把find搜索到的列表里的文件打包,利用-X我们可以将若干保密文件规避掉
#find -maxdepth 1 -name "f[0-9]" >filelist.txt
#echo ./f2 >except.txt
[root@Centos7 test]#cat filelist.txt
./f1
./f2
./f3
./f4
[root@Centos7 test]#cat except.txt
./f2
[root@Centos7 test]#tar -cvf file.tar -T filelist.txt -X except.txt
[root@Centos7 test]#tar -tvf file.tar
-rw-r--r-- root/root 18 2017-08-10 22:35 ./f1
-rw-r--r-- root/root 21 2017-08-10 22:36 ./f3
-rw-r--r-- root/root 11 2017-08-10 22:36 ./f4
可以发现filelist.txt列表里除了./f2(被-X 排除列表排除了)没有被打包,其他均被打包在了file.tar里
 
法2:利用-exec把搜索到的文件直接打包
#find -name "f*" -exec tar -rvf sumfile.tar {} \;
注意:这里tar的选项是rvf,为什么是追加而不是创建呢?
因为-exec命令 会把查到的所有文件一 一传递给tar,如果是创建的话,每次创建都会覆盖之前打包的文件,
到最后包里只能剩下一个文件。所以我们只能用追加的方法,将他们一 一添加至打包文件,当然这个包需要提前创建。
----------------------------------------------------------------------------------------------------------------------------
 
 
 
posted @ 2017-08-12 20:07  来碗毒鸡汤好么  阅读(163)  评论(0编辑  收藏  举报