压缩解压和tar命令
gzip
、bzip2
、xz
、compress
是压缩/解压命令
这些命令只能压缩文件,不能压缩目录(gzip
和compress
的-r
选项只是将文件夹内的所有文件逐一压缩)。
压缩:
压缩并删除源文件,若当前目录有同名文件会报错或提示是否覆盖,可以加-f
参数强制覆盖:
gzip file #输出:file.gz
bzip2 file #输出:file.bz2
xz file #输出:file.xz
compress file #输出:file.Z
压缩但保留源文件:
gzip -c file > file.gz
bzip2 -c file > output.bz2
xz -c file > /root/file.xz
compress -c file > file.Z
bzip2
和xz
还可以用-k
参数保留源文件,但无法指定压缩文件的路径和文件名。
bzip2 -k file #输出:file.bz2
xz -k file #输出:file.xz
除了compress
,其它三个命令还可以指定压缩比:1~9
,1
最快,9
最好:
gzip -1 file
bzip2 -k6 file
xz -2 file
解压:
解压并删除压缩文件:
gzip -dN file.gz # -N参数保持压缩前的文件名,后面有说明
bzip2 -d file.bz2
xz -d file.xz
compress -d file.Z
解压但保留压缩文件:
gzip -dc file.gz > file
bzip2 -dc file.bz2 > file
xz -dc file.xz > /root/file
compress -dc file.Z > file
bzip2
和xz
还可以用-k
参数保留源文件,但是无法指定解压文件的路径和文件名。
bzip2 -dk file.bz2 #得到file
xz -dk file.xz #得到file
GNUtar
命令是归档(打包)命令
归档就是将多个文件或文件夹打包为一个文件。 tar
命令不会对源文件造成影响,但若是输出文件存在则会直接覆盖,如果输出文件是目录且目录已经存在,会进行目录合并,目录里的同名文件会直接覆盖。
打包和解包:
tar -c input1 input2 > file.tar #将input1、input2打包为file.tar,tar会记录源文件的时间戳信息
tar -cf file.tar input1 input2 #将input1、input2打包为file.tar
tar -xf file.tar -C output_dir #将file.tar解包到output_dir,-C指定解压位置(必须是目录),默认为当前目录
tar -tf file.tar #列出file.tar包里的所有文件
tar -xf file.tar input1 #只解包file.tar里的input1出来
tar
命令的参数可以加-
也可以不加,-C
参数必须加-
。
打包并压缩:
tar
命令通过指定参数可以和压缩命令一起使用,会先打包,再压缩。 gzip
、bzip2
、xz
、compress
分别对应参数z
、j
、J
、Z
。
tar -czf file.tar.gz input1 input2 #先将input1、input2进行打包,然后再用gzip进行压缩。扩展名也可为.tgz
tar -cjf file.tar.bz2 input1 input2
tar cJf file.tar.xz input1 input2
tar cZf file.tar.Z input1 input2
将打包并压缩的文件进行先解压再解包:
可以直接解包,tar
能自动识别是用什么算法进行的压缩,并选择相应解压算法:
tar -xf output.tar.*
也可以指定解压算法,若指定的解压算法和压缩算法不匹配会报错:
tar -xzf output.tar.gz
tar -xjf file.tar.bz2
tar xJf file.tar.xz
tar xZf file.tar.Z
注意:
Linux系统文件时间戳分atime、mtime、ctime,本文后面谈到的时间戳全部只指mtime(修改时间戳)。
A:
使用bzip2
、xz
、compress
压缩得到的压缩文件的内容只取决于源文件的内容,而源文件的文件名、权限、时间戳等信息都不会作为内容保存。所以md5值相同的文件得到的压缩文件md5也相同。
若不使用-c
参数,用以上命令压缩文件或解压文件,得到的输出文件的文件名和权限会和源文件一样。
B: gzip
加-n
参数和A相同。
C: gzip
压缩默认会保留源文件的文件名和时间戳信息,若不想保留需加-n
参数。
若想解压获得原来的文件名需加-N
参数(否则会和压缩文件同名),若想获得原来的时间戳还不能用-c
参数。
gzip -dN file.gz
gzip -lN file.gz #查看压缩前的文件名等信息
D:
使用tar
打包得到的.tar
文件的文件内容包含了以下信息:源文件的文件内容、文件名(目录还会保存目录结构)、文件权限、时间戳等。打包时可以通过--mtime
参数指定打包文件的时间戳信息,这样打包后文件的文件内容只取决于源文件的内容、权限和文件名(若是目录还包括目录结构)。
最后:
如果用tar -czf
对相同内容的文件打包并压缩,不同时间生成的.tar.gz
文件的md5是不同的,因为tar -czf
命令会先打包成.tar
文件再调用gzip
进行压缩,.tar
文件的时间戳不同所以压缩后的文件内容也不同。
以下命令可以保证不同时间打包的相同内容的文件md5相同:
tar -c input1 input2 | gzip -n > output.tar.gz
但是如果文件的时间戳改变了,即使文件的内容没有发生变化(比如用vim打开文件,没有修改但是用wq
退出),打包文件的md5值也会发生变化。
怎么保证对相同内容的文件打包总是生成md5值一样的文件呢:
tar -c --mtime='1988-01-01' input1 input2 | gzip -n > output.tar.gz
上面说的相同内容的文件,包括文件内容、文件名和权限都相同(若是目录还包括目录结构)。
zip和unzip既可以压缩又可以归档
zip output.zip input1 input2 #将input1、input2压缩打包到output.zip
unzip output.zip #将output.zip解包解压
上一篇: 正则匹配手机号
推荐阅读
-
Linux解压命令tar -zxvf中参数zxvf解释 博客分类: Linux tarzxvflinux
-
tar linux 命令说明 博客分类: Linux linuxtar压缩untar解压缩
-
python 实现tar文件压缩解压的实例详解
-
Linux—用户管理、文件夹权限、vim的使用、压缩解压命令
-
python 实现tar文件压缩解压的实例详解
-
使用java基础类实现zip压缩和zip解压工具类分享
-
使用java基础类实现zip压缩和zip解压工具类分享
-
tar.bz2 && .tar.xz 解压命令
-
在linux中使用tar命令进行压缩和解压缩
-
浅谈Linux下tar,jar压缩,解压的常用命令