tar命令可以为 Linux 的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
  首先要弄清两个概念:

  • 打包: 将一大堆文件或目录变成一个总的文件。
  • 压缩: 将一个大的文件通过一些压缩算法变成一个小文件。

  为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
  Linux 下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。

命令格式

1
tar [-cxtzjvfpPN] File or directory

命令功能

  • 将多个文件或目录打包在一起,也可用来压缩和解压文件(tar本身不具有压缩、解压功能,他是通过调用 gzip 或 zip 实现的)。

命令参数

  • -A:新增压缩文件到已存在的压缩;
  • -B:设置区块大小;
  • -c:建立新的压缩文件;
  • -d:记录文件的差别;
  • -r:添加文件到已经压缩的文件;
  • -u:添加改变了和现有的文件到已经存在的压缩文件;
  • -x:解开一个压缩文件;
  • -t:显示压缩文件的内容;
  • -z:支持 gzip 解压文件;
  • -j:支持 bzip2 解压文件;
  • -Z:支持 compress 解压文件;
  • -v:显示详细 tar 执行过程;
  • -l:文件系统边界设置;
  • -k:保留原有文件不覆盖;
  • -m:保留文件不被覆盖;
  • -W:确认压缩文件的正确性;
  • -f:指定压缩文件;
  • -p:使用原文件的原来属性(属性不会依据使用者而变);
  • -P:可以使用绝对路径来压缩;
  • -b:设置区块数目;
  • -C:切换到指定目录;
  • -N:打包比指定日期新的文件或文件夹;
  • --help:显示帮助信息;
  • --version:显示版本信息;
  • --exclude:压缩过程中不打包指定文件或文件夹;
  • 注:
    • 在一条命令中,-c | -x | -t 仅能存在一个;
    • -f之后要立即接档案名,例如使用tar -zcvfP tfile sfile就是错误的写法,正确的写法是tar -zcvPf tfile sfile

使用范例

  • 打包文件
    1
    2
    3
    4
    tar -cvf log.tar test.txt		# 仅打包,不压缩
    tar -zcvf log.tar.gz test.txt # 打包后,以 gzip 压缩
    tar -jcvf log.tar.bz2 test.txt # 打包后,以 bzip2 压缩
    # 在参数-f之后的文件档名是自己取的,我们习惯上都用.tar来作为辨识;如果加-z参数,则以.tar.gz或.tgz来代表gzip压缩过的tar包; 如果加-j参数,则以.tar.bz2来作为tar包名
  • 打包多个文件或文件夹
    1
    tar -zcvf log.tar.gz 1.txt test/	# 多个文件或文件夹之间用空格分割
  • 打包所有 .jpg 文件
    1
    tar -zcvf file.tar.gz *.jpg
  • 解包文件
    1
    2
    3
    tar -xvf log.tar
    tar -zxvf log.tar.gz
    tar -jxvf log.tar.bz2
  • 解压压缩包到指定文件夹下
    1
    tar -zxvf log.tar.gz -C /data
  • 查看 tar 包内有哪些文件
    1
    2
    [root@localhost test]# tar -ztvf log.tar.gz
    -rw-r--r-- root/root 0 2022-07-31 01:06 test.txt
  • 解压 tar 包中的部分文件
    1
    2
    3
    4
    5
    6
    [root@localhost test]# tar -ztvf 1.tar.gz 
    drwxr-xr-x root/root 0 2022-07-31 01:19 test/
    -rw-r--r-- root/root 0 2022-07-31 01:17 1.txt
    [root@localhost test]# tar -zxvf 1.tar.gz 1.txt
    1.txt
    # 可以透过tar -ztvf来查阅tar包内的文件名称,如果单只要一个文件,就可以透过这个方式来解压部分文件
  • 打包文件并保留其权限
    1
    2
    tar -zcvpf log.tar.gz 1.txt
    # 在想要保留原本文件的属性时,-p很重要
  • 打包文件夹中比指定日期新的文件
    1
    tar -N "2022/07/30" -zcvf 1.tar.gz data/
  • 排除指定文件或文件夹进行打包
    1
    tar --exclude data/1.txt -zcvf log.tar.gz data/* /etc

参考文献

  【1】https://www.cnblogs.com/sui776265233/p/10185402.html
  【2】https://www.jianshu.com/p/e4249f0e76e7
  【3】https://blog.csdn.net/zjwlgr/article/details/122543552
  【4】https://www.bilibili.com/read/cv14025026