曾经稀里糊涂的用了,现在来搞明白吧!

tar 这个命令使用频率最高的方法可能就是下面这两个了:

1
2
$tar -czvf example.tar.gz ~/example  # 压缩 example 文件为 example.tar.gz
$tar -xzvf ~/example.tar.gz # 解压缩 example.tar.gz 到当前目录

一直以来都是把 tar 当一个压缩指令来使用的,但是其实它只是一个打包命令, 并不具备压缩功能,tar 的压缩功能主要来自于 gzip/bzip2/xz 的支持。

参数

tar 支持的参数非常多,我们只需要记住几个常用的就好,完整的参数可以通过 man tar 查看。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$tar [-z|-j|-J] [cv] [-f 待创建的压缩文件名] filename... # 打包与压缩
$tar [-z|-j|-J] [tv] [-f 已有的压缩文件] # 查看压缩包内文件
$tar [-z|-j|-J] [xv] [-f 已有的压缩文件] [-C 指定解压缩目标目录] # 解压缩
选项与参数:
-c  :建立新的压缩文件(常用)
-v  :打印压缩/解压缩过程中正在处理的文件名(常用)
-z  :通过 gzip 指令进行压缩/解压缩:此时文件名最好为 *.tar.gz(常用)
-f  :-f 后面要立即接被处理的文件名,建议 -f 单独写(常用)
-x  :从备份文件中还原文件(常用)
-C  :指定解压缩目标目录(常用)
-t  :列出压缩文件中的内容
-j  :通过 bzip2 指令进行压缩/解压缩:此时文件名最好为 *.tar.bz2
-J  :通过 xz 指令进行压缩/解压缩:此时文件名最好为 *.tar.xz
      特別留意, -z, -j, -J 不可以同時出現在一串指令列中
-p  :保留压缩文件的原本权限与属性,常用于备份敏感文件
--exclude=FILE:在压缩的过程中,不要将 FILE 打包! 

因为 [-f filename] 是靠在一起的,所以在开头写成 [-czvf filename] 是对的, 但是如果写成 [-czfv filename] 此时生成的压缩文件名就变成了 v, 所以最好将 -f 独立开来。

压缩方式的选择

上面列出的参数中有 3 种压缩方式可选,但是为什么只有 gzip 标注了常用呢?

其实具体原因我也不知道,个人猜测有两个:

  • gzip 生成的文件:*.tar.gz ,拥有更好的支持,例如 Windows 平台下的 WinRAR
  • gzip 拥有更快的压缩速度

更快的压缩速度意味着更小的压缩比,所以如果压缩的文件很大,时间成本也是需要考虑的。

如果你的存储空间比较有限,就选择 -J 啦,xz 是压缩比最高的!


> 参考链接:鸟哥的 Linux 私房菜