tar 压缩/解压缩命令

关于(解)压缩

目前市面上存在许多压缩格式,例如gz,tar等,当然,更为常见的是zip、rar、7z等压缩格式,面对众多的压缩格式,每个不同的格式都有相应的命令,例如有zip、unzip、gzip、gunzip等等,而tar命令则可以通过调用这些命令来实现一站式压缩/解压缩

基本用法

压缩

1
tar -cvf pack.tar ./*.jpg

上述命令可以将当前目录下的所有jpg文件都压缩进一个名为pack.tar的压缩包中。参数含义:

-c: 表示要创建新的压缩包

-f: 指定压缩包的名称

-v: 在命令进行过程中输出一些日志(使用这个参数可以大概了解解压缩的进度,不然在对大型文件或者很多小文件进行操作时看起来就像是终端卡了一样,没有任何动静)

注意: 若将c和f调换位置,即写成这样: tar -fc pack.tar ./*.jpg 则会报错,因为-f参数后面需要直接跟压缩报名,所以不能更换位置,这和其他所有需要接收参数的Linux命令选项都是一样的

调用其他压缩格式的命令

可以使用特定的命令选项来调用其他压缩格式的命令,这里以最常用的gzip为例:

1
tar -czvf arch.gz file3

上述命令会调用gzip来进行压缩,其实,你的压缩包后缀名不一定要取成zip,你可以取成其他任何名字,甚至不要后缀名,在用tar进行解压缩时,tar仍然能正常工作,这是因为tar并不从一个压缩包的名字来判断这个压缩包是什么类型的压缩包,而是通过这个压缩包内部的元数据来进行判断,我们会在后面的解压缩一节演示这一点

注意: 虽然取成任何后缀名都可以正常工作,但是为了压缩包能在其他操作系统正常使用(例如Windows),尽量还是取相对应的后缀名,除非你想刻意隐藏这是一个压缩包

更新压缩包内容

可以使用 -r 和 -u 参数,这两者都可以更新压缩包内容,但是有些区别

  • -r 会将文件添加到压缩包的末尾,若文件已存在则强行替换
  • -u 若文件不存在,则行为同-r,若文件存在且压缩包中现有的文件的修改时间比新的文件要早,那么就会执行替换操作,否则什么都不做

比如:

1
tar -rvf pack.tar some.png

上述命令会将some.png这个文件添加到pack.tar压缩包的末尾

1
tar -uvf pack.tar dog.png

若pack.tar中的dog.png文件不存在,则将dog.png添加到pack.tar的末尾,否则,检查压缩包中dog.png的修改时间,如果比想要添加的dog.png的修改时间早,则将压缩包中的dog.png替换为新的dog.png,如果想要添加的dog.png的修改日期比压缩包中现有的dog.png的修改日期早,那么不做任何操作

查看压缩包内容

1
tar -tvf pack.tar

-f参数的含义同压缩,-t参数表示列出pack.tar的所有内容,注意这一操作会将压缩包里面所有子目录和文件全部递归地列出,如果你的压缩包中文件或目录比较多,可能会产生非常多的输出

解压缩

解压缩比压缩简单很多,不需要指定使用哪个格式的解压缩工具进行解压,tar会自动决定使用哪个,就算你指定了一个解压缩格式,tar也会忽略,解压缩命令格式如下:

1
tar -xvf arch.tar.gz -C ./dir

参数解释:

  • -x: 使用tar的解压缩模式
  • -C: 解压缩完毕后的文件应当存放在哪儿

如果不指定参数-C,那么tar会默认将压缩包里面的内容解压到当前目录下